0

ここからpowershellスクリプトの拡張に取り組んでいます:

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
}

正常に動作していましたが、エクスポート csv に -append フラグを使用できるように、Powershell 3 にアップグレードしました。今は壊れています。

と言って電話Invokeするとエラーが出続けます。ただし、下部の for ループをコメント アウトし、1 台のコンピューターを手動で指定すると、スクリプトを適切に実行できます。for ループを追加し、上記の行を呼び出す前に値を出力する行を追加すると、各エラーの前に各マシン名が適切に出力されます。$members = @($group.psbase.Invoke("Members"))The network path was not found$ComputerNameInvokehosts.txt

hosts.txt 内のすべてのマシンは ping 可能であり、foreach ループを使用する代わりに、関数呼び出しで手動で指定すると問題なく動作します。

なぜこれが私に死に続けるのか、またはそれを修正する方法はありますか?

ありがとう!

4

2 に答える 2

2

テストするだけです。

以下を使用して、PowerShell V2.0 でスクリプトを実行してみてください。

PS> PowerShell -バージョン 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;
};
于 2013-05-29T18:40:38.730 に答える
1

私はそれを働かせました。問題は、関数をグローバルに設定する必要があることでした。このstackexchangeの質問の説明では、ISEで動作しているがCLIでは動作していないという動作について説明しました。

その質問で述べたように変数を変更する代わりに、単に変更しましたfunction Get-LocalGroupMembership {

function global:Get-LocalGroupMembership {

今は魔法のように働いています。それにもかかわらず、すべての助けに感謝します。

于 2013-05-30T13:55:01.077 に答える