0

サイトでこのコードを見つけました: More userAccountControl Flag Fun (Convert-ToUACFlag.ps1) - http://bsonposh.com/archives/288、アクティブ ディレクトリのユーザー向け。と、ちょっと分かった気がしたので、こちらの記事を参考に逆向きの関数を作ってみたのですが、カウンターとしては機能しそうです|(パイプ) -> ? (if) % は (非常に) 明確ではありません。それが何をするか (モジュラス演算子ではないと思います。そうでなければ、配管を誤解しています)

%= モジュラス演算子による代入

echo( 1..($flags.length) | ? {$value -band [math]::Pow(2,$_)} |  %{ $flags[$_] });

これは元の機能であり、正常に機能します

function checkUserControl
{
    param
    ([int]$value)
    $flags = @("","ACCOUNTDISABLE","", "HOMEDIR_REQUIRED",
    "LOCKOUT", "PASSWD_NOTREQD","PASSWD_CANT_CHANGE", "ENCRYPTED_TEXT_PWD_ALLOWED",
    "TEMP_DUPLICATE_ACCOUNT", "NORMAL_ACCOUNT", "","INTERDOMAIN_TRUST_ACCOUNT", "WORKSTATION_TRUST_ACCOUNT",
    "SERVER_TRUST_ACCOUNT", "", "", "DONT_EXPIRE_PASSWORD", "MNS_LOGON_ACCOUNT", "SMARTCARD_REQUIRED",
    "TRUSTED_FOR_DELEGATION", "NOT_DELEGATED","USE_DES_KEY_ONLY", "DONT_REQ_PREAUTH",
    "PASSWORD_EXPIRED", "TRUSTED_TO_AUTH_FOR_DELEGATION")

    echo( 1..($flags.length) | ? {$value -band [math]::Pow(2,$_)} |  %{ $flags[$_] });
}

だから私自身の試み(数回の試み)

function checkUserControl2
    {
        param
        ([string]$value)
        $flags = @("","ACCOUNTDISABLE","", "HOMEDIR_REQUIRED",
        "LOCKOUT", "PASSWD_NOTREQD","PASSWD_CANT_CHANGE", "ENCRYPTED_TEXT_PWD_ALLOWED",
        "TEMP_DUPLICATE_ACCOUNT", "NORMAL_ACCOUNT", "","INTERDOMAIN_TRUST_ACCOUNT", "WORKSTATION_TRUST_ACCOUNT",
        "SERVER_TRUST_ACCOUNT", "", "", "DONT_EXPIRE_PASSWORD", "MNS_LOGON_ACCOUNT", "SMARTCARD_REQUIRED",
        "TRUSTED_FOR_DELEGATION", "NOT_DELEGATED","USE_DES_KEY_ONLY", "DONT_REQ_PREAUTH",
        "PASSWORD_EXPIRED", "TRUSTED_TO_AUTH_FOR_DELEGATION")

        #echo( 1..($flags.length) | ? {$value -eq $flags[$_] } )} |  %{$_});
        #echo( 1..($flags.length) | ? {$value -match $flags[$_] } )} |  %{$_});
        #echo( 1..($flags.length) | ? {$value -ieq $flags[$_] } )} |  %{$_});
        #echo( 1..($flags.length) | ? {$value -imatch $flags[$_] } )} |  %{ $_ });
        #echo( 1..($flags.length) | ? {$value -ieq $flags[$_] } )} |  {$_});
        echo( 1..($flags.length) | ? {$value -imatch $flags[$_] } )} |  { $_ });
    }

 echo "DONT_EXPIRE_PASSWORD";
 checkUserControl2("DONT_EXPIRE_PASSWORD");

私が得るエラーan empty pipe is not allowed

4

2 に答える 2

0

コードにもいくつかの括弧が間違っているようです。私は使うだろう:

function test {
param([string]$value)

$flags = @("","ACCOUNTDISABLE","", "HOMEDIR_REQUIRED",
        "LOCKOUT", "PASSWD_NOTREQD","PASSWD_CANT_CHANGE", "ENCRYPTED_TEXT_PWD_ALLOWED",
        "TEMP_DUPLICATE_ACCOUNT", "NORMAL_ACCOUNT", "","INTERDOMAIN_TRUST_ACCOUNT", "WORKSTATION_TRUST_ACCOUNT",
        "SERVER_TRUST_ACCOUNT", "", "", "DONT_EXPIRE_PASSWORD", "MNS_LOGON_ACCOUNT", "SMARTCARD_REQUIRED",
        "TRUSTED_FOR_DELEGATION", "NOT_DELEGATED","USE_DES_KEY_ONLY", "DONT_REQ_PREAUTH",
        "PASSWORD_EXPIRED", "TRUSTED_TO_AUTH_FOR_DELEGATION")

    ## output bit flag-number (disabled atm.)   
    #(1..$flags.length) | ? {$flags[$_] -match $value}

    ## value
    (1..$flags.length) | ? {$flags[$_] -match $value} | % {[Math]::Pow(2,$_)}
}

test "HOMEDIR_REQUIRED"

出力:

8
于 2012-12-18T12:14:14.190 に答える