0

指定された名前のユーザーが存在しない場合にローカル ユーザーを作成するカスタム PowerShell スクリプトを作成しようとしています。

私はこのスクリプトを持っています:

function Ensure-LocalUser
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string] $userName,
        [Parameter(Mandatory=$true)]
        [string] $passWord
    )
    process{

        $objOu = [ADSI]"WinNT://${env:Computername}"
        $localUsers = $objOu.Children | where {$_.SchemaClassName -eq 'user'}  | Select {$_.name[0].ToString()} 

        if($localUsers -NotContains $userName)
        {
            $objUser = $objOU.Create("User", $userName)
            $objUser.setpassword($password)
            $objUser.SetInfo()
            $objUser.description = "CMM Test user"
            $objUser.SetInfo()

            return $true
        }
        else
        {
            return $false
        }

    }
}

ユーザーの作成に関する部分は動作しますが、私の-NotContains検証では常に false が返されます。これにより、ユーザーが既に存在するため、ユーザーの作成に失敗します。デバッガーを使用すると、探しているユーザー名が $localusers に実際に含まれていることがわかります。

スクリプトを修正して目標を達成するにはどうすればよいですか?

4

4 に答える 4

3

この行を変更

localUsers = $objOu.Children | where {$_.SchemaClassName -eq 'user'}  | Select {$_.name[0].ToString()} 

$localUsers = $objOu.Children | where {$_.SchemaClassName -eq 'user'}  | % {$_.name[0].ToString()}
于 2012-06-20T14:22:01.957 に答える
3

あなたは間違っています;)あなたは本当にこれが欲しいです(これは文字列の配列を作成します):

$ou.Children | where {$_.SchemaClassName -eq 'user'}  | foreach {
      $_.name[0].tostring() }

あなたのコードは、「$_.name[0].ToString()」というプロパティを持つカスタム オブジェクトを作成しています。

于 2012-06-20T14:22:38.663 に答える