2013-05-29 7 views
0

Я работаю над расширением сценария Powershell здесь:скрипт сломался после обновления до Powershell 3

http://gallery.technet.microsoft.com/scriptcenter/Get-LocalGroupMembership-87d10dd8

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

$machines = get-content -LiteralPath C:\scripts\hosts.txt 
foreach ($ComputerName in $machines) { 
get-localgroupmembership -ComputerName $ComputerName 
} 

Он работает нормально, но потом я повышен до Powershell 3, так что я мог бы использовать флаг -Append для экспорта-CSV. Теперь он сломан.

Я продолжаю получать сообщение об ошибке при звонке Invoke по телефону $members = @($group.psbase.Invoke("Members")), говоря, что The network path was not found. Тем не менее, комментируя цикл for внизу и вручную указывая один компьютер, сценарий может работать правильно. Добавление цикла for и добавление строки для печати значения $ComputerName перед вызовом строки Invoke выше приводит к правильной печати каждого имени машины с hosts.txt должным образом перед каждой ошибкой.

Все машины в hosts.txt являются pingable и работают нормально, если они указаны вручную в вызове функции вместо использования цикла foreach.

Любые идеи, почему это продолжает умирать от меня или как его исправить?

Спасибо!

+0

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

+0

Ошибка ссылается на указанную выше строку. Правильность написания. Как я уже упоминал, он работал отлично (за исключением желаемого добавления). Тогда изменилось только обновление до версии 3.0. После этого он больше не работал. Кроме того, ручное задание одной машины, а не циклизация текстового файла, по-прежнему работает правильно. Альтернативные спецификации, такие как? Я совершенно новый для powershell. – vidkun

+0

Я имею в виду, у вас есть попугай powershell для вас, что он думает о сетевом пути.Поскольку вы обновили язык и поддерживающие системы, вполне вероятно, что он * может * интерпретировать ваш ввод иначе, чем раньше, и не так, как вы предполагаете. –

ответ

1

Я получил его работу. Проблема заключалась в том, что мне нужно было установить мою функцию в глобальную. Объяснение в this stackexchange question объясняло поведение, которое я видел, работая в ISE, но не CLI.

Вместо того чтобы изменять переменные, как указано в этом вопросе, я просто изменил function Get-LocalGroupMembership {

в

function global:Get-LocalGroupMembership {

Работая как шарм в настоящее время. Спасибо за всю помощь, которая работает через нее.

2

Просто для проверки.

Попробуйте запустить скрипт под PowerShell версии 2.0, используя следующие:

PS> PowerShell -Version 2,0

Когда стремительные изменения затем повторите попытку. Посмотрите, работает ли это.

У меня загружен PowerShell 3.0, который работает нормально. Вот сценарий:

$machines = get-content -LiteralPath C:\temp\hosts.txt; 

foreach ($ComputerName in $machines) { 
    Get-LocalGroupMembership -ComputerName $ComputerName ` 
    | Export-Csv -Path c:\temp\testadmin.csv -NoClobber ` 
      -NoTypeInformation -Append; 
}; 
+0

У меня почти то же самое. Я пробовал с и без. На данный момент я просто пытаюсь запустить скрипт и вывести его на экран, поэтому на данный момент у меня нет части экспорта-csv. Кроме этого, мой скрипт выглядит точно так же и все еще не работает в ручном задании PS 1, 2 и 3. – vidkun

+0

Теперь это странно. Сценарий работает отлично, когда я запускаю его из ISE. Однако вызов его из cmd или PS терпит неудачу. – vidkun

+0

Я заработал. Проблема заключалась в том, что мне нужно было установить мою функцию в глобальную. Объяснение в http://stackoverflow.com/questions/16070633/powershell-script-module-variables-not-available-outside-ofisise объясняет поведение, которое я видел с ним, работая в ISE, но не CLI. Вместо изменения каких-либо переменных я просто изменил функцию Get-LocalGroupMembership на «function global: Get-LocalGroupMembership». Теперь как шарм. Поскольку проблема закончилась чем-то совершенно другим, как я могу сказать спасибо и дать реквизиты y'all, не считая неправильный ответ как правильный? благодаря – vidkun