Я пытаюсь выяснить, как найти на удаленных серверах ТОЛЬКО локальные диски, а затем посмотреть на их каталоги верхнего уровня. Это то, что я до сих пор:

foreach ($i in Get-Content "U:\Powershell\Lists\Servers.txt")
    {$i + "`n" + "=========================="; [System.IO.DriveInfo]::getdrives() | Where-Object {$_.DriveType -eq 'Fixed'}}

Я полагаю, что это возвращает только локальные диски локального сервера, но это также самое близкое, к которому я пришел, чтобы выяснить, что я хочу видеть. Также не совсем уверен, как я возьму эти результаты, а затем выполню Get-ChildItem для перечисленных дисков. Я все еще довольно новичок в написании сценариев PS, поэтому любые объяснения приветствуются!

1 ответ1

0

Для этого вам необходимо настроить WinRM Service.

$DriveInformation = @()
$servers = Get-Content "U:\Powershell\Lists\Servers.txt" | % {
    $invoke = Invoke-Command -ComputerName $_ {
        [System.IO.DriveInfo]::getdrives() | ? {$_.DriveType -eq 'Fixed'} | 
            % {  gci $_.Name | ? {$_.PSIsContainer} }
    }
    $DriveInformation += $Invoke
}

Сначала мы создаем массив, который в конце будет содержать информацию о диске, затем мы читаем все имена серверов с get-content , зацикливаем его с псевдонимом foreach-object % чтобы получить имена серверов. Затем мы вызываем команду для чтения информации о диске на каждом сервере с помощью команды invoke-command , внутри скрипта блока invoke-command выбираются локальные диски, и для каждого выбранного диска мы делаем get-childitem aka gci чтобы получить верх каталоги уровня (только каталоги. если вы также хотите файлы, удалите | ? {$_.PSIsContainer})

если вы хотите экспортировать данные, просто используйте:

$DriveInformation | out-file "U:\somepath\somename.txt" -force

и поместите его в конец вашего сценария

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .