1

次のようなサーバーのリストを 1 行に 1 つずつ含むテキスト ファイルがあります。

SERVER1
SERVER2
SERVER3

Get-Contentファイルに対して実行すると、出力は次のようになります。

SERVER1
SERVER2
SERVER3

そのため、複数のサーバーを配列として取り込み、関数内の配列を反復処理する関数を作成しています。関数は現在次のようになっています。

function Get-LocalAdministrators 
{
    param(
        [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
        [string[]]$computers
    )

    foreach ($computername in $computers)
    {
        $ADMINS = get-wmiobject -computername $computername -query "select * from win32_groupuser where GroupComponent=""Win32_Group.Domain='$computername',Name='administrators'""" | % {$_.partcomponent}

        foreach ($ADMIN in $ADMINS) 
        {
            $admin = $admin.replace("\\$computername\root\cimv2:Win32_UserAccount.Domain=","") # trims the results for a user
            $admin = $admin.replace("\\$computername\root\cimv2:Win32_Group.Domain=","") # trims the results for a group
            $admin = $admin.replace('",Name="',"\")
            $admin = $admin.REPLACE("""","") # strips the last "

            $objOutput = New-Object PSObject -Property @{
                Machinename = $($computername)
                Fullname = ($admin)
                #DomainName  =$admin.split("\")[0]
                #UserName = $admin.split("\")[1]
            }

        $objReport+=@($objOutput)
        }

        return $objReport
    }
}

次に、関数を次のように呼び出す予定です。

Get-Content “C:\temp\computers.txt” | Get-LocalAdministrators

ただし、関数を実行すると、$computers の値が{SERVER3}(つまり、ファイルの最後の行のみ) であることがわかります。Google を介してこれに対する答えを見つけようとしましたが、多くの配列がありますが、参照/例、ファイルからの値の読み取りをparamステートメントの配列に組み合わせたものを見つけることができません。私のPS初心者の無知を許してください、そして私が必要とする手がかりを提供してください...ありがとう。

更新: 実行中の $computers の値を示す PowerGUI スクリプト エディターで実行されているスクリプトのスクリーンショットへのリンク:デバッグ実行スクリーンショット

4

1 に答える 1