1

Я новичок в Powershell и использую PS v2. Я могу видеть огромный потенциал, который у него есть, но я просто не могу заставить следующий код работать полностью. Я пытаюсь получить файл csv, который содержит необходимые dll-символы в подкаталоге GAC_MSIL или подкаталоге, получить версию dll, внутреннее имя файла и путь, а также IP-адрес сервера.

Код приведен ниже, и он представлен в виде однострочного формата, поскольку его проще выполнить удаленным удалением на один из серверов в ферме серверов и запустить одну строку из этой консоли, например, для входа в систему безопасности и т.д. Код создал набор результатов, но только для последнего сервера, он, вероятно, делает первый сервер, а затем перезаписывает его, но я не уверен в этом.

Я много читал об использовании массивов и пользовательских объектов и попытался это сделать, но мои навыки написания сценариев в PS еще не дошли до этого.

$out = "Ouput_dll_ver_results.csv";
foreach ($server in '11.222.33.123', '11.222.33.124') 
{
    $VersionInfo = 
    (
       Get-ChildItem \\$server\C$\windows\assembly\GAC_MSIL -recurse -Include abc*.dll,def*.dll,ghi*.dll,jkl*.dll 
           | Where-Object{$_.FullName -notmatch "\\windows\\assembly\\temp\\"}
    )
}; 
$VersionInfo | %{Get-Command $_.FullName} | select -expand File* |Export-Csv $out

Не могли бы вы порекомендовать, если / как можно исправить вышеуказанный код, и если нет, какие альтернативы у меня есть, чтобы получить нужную мне информацию?

1 ответ1

1

Что ж, каждый раз, когда вы выполняете итерацию в цикле, вы переписываете переменную $VersionInfo . Конечно, все, что вы получите в конце - это последняя запись. Попробуйте заменить

$VersionInfo =

с

$VersionInfo +=

и посмотрим, поможет ли это. Это должно APPEND вместо перезаписи.

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