次の方法で共有


PowerShell を使用して App-V データベースをインストールし、関連するセキュリティ識別子を変換する

次の PowerShell 手順を使用して、任意の数のActive Directory Domain Services (AD DS) ユーザーアカウントまたはマシン アカウントを、標準形式と、SQL スクリプトの実行時に Microsoft SQL Serverで使用される 16 進形式の両方で書式設定されたセキュリティ識別子 (SID) に変換します。

この手順を実行する前に、次の一覧に表示される情報と例を読んで理解しておく必要があります。

  • .INPUTS – SID 形式への変換に使用されるアカウントまたはアカウント。 1 つのアカウント名またはアカウント名の配列を指定できます。

  • .OUTPUTS - 標準および 16 進形式の対応する SID を持つアカウント名の一覧。

  • -

    .\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 |Format-List

    $accountsArray = @("DOMAIN\user_account1", "DOMAIN\machine_account1$", "DOMAIN_user_account2")

    .\ConvertToSID.ps1 $accountsArray |Write-Output -FilePath .\SIDs.txt -Width 200

    #>

任意の数のActive Directory Domain Services (AD DS) ユーザーまたはマシン アカウントを書式設定されたセキュリティ識別子 (SID) に変換するには

  1. 次のスクリプトをテキスト エディターにコピーし、PowerShell スクリプト ファイルとして保存します (例: ConvertToSIDs.ps1)。

  2. PowerShell コンソールを開くには、[ スタート ] をクリックし、「 PowerShell」と入力します。 [Windows PowerShell] を右クリックし、[管理者として実行] を選択します。

    <#
    .SYNOPSIS
    This PowerShell script will take an array of account names and try to convert each of them to the corresponding SID in standard and hexadecimal formats.
    
    .DESCRIPTION
    This is a PowerShell script that converts any number of Active Directory (AD) user or machine accounts into formatted Security Identifiers (SIDs) both in the standard format and in the hexadecimal format used by SQL server when running SQL scripts.
    
    .INPUTS
    The account(s) to convert to SID format. This can be a single account name or an array of account names. Please see examples below.
    
    .OUTPUTS
    A list of account names with the corresponding SID in standard and hexadecimal formats
    
    .EXAMPLE
    .\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 | Format-List
    
    .EXAMPLE
    $accountsArray = @("DOMAIN\user_account1", "DOMAIN\machine_account1$", "DOMAIN_user_account2")
    
    .\ConvertToSID.ps1 $accountsArray | Write-Output -FilePath .\SIDs.txt -Width 200
    #>
    
    function ConvertSIDToHexFormat
    {
       param([System.Security.Principal.SecurityIdentifier]$sidToConvert)
    
       $sb = New-Object System.Text.StringBuilder
    
       [int] $binLength = $sidToConvert.BinaryLength
    
       [Byte[]] $byteArray = New-Object Byte[] $binLength
    
       $sidToConvert.GetBinaryForm($byteArray, 0)
    
       foreach($byte in $byteArray)
       {
           $sb.Append($byte.ToString("X2")) |Out-Null
       }
       return $sb.ToString()
    }
    
    [string[]]$myArgs = $args
    
    
    
    if(($myArgs.Length -lt 1) -or ($myArgs[0].CompareTo("/?") -eq 0))
    {
        [string]::Format("{0}====== Description ======{0}{0}" +
                   "  Converts any number of user or machine account names to string and hexadecimal SIDs.{0}" +
                   "  Pass the account(s) as space separated command line parameters. (For example 'ConvertToSID.exe DOMAIN\\Account1 DOMAIN\\Account2 ...'){0}" +
                   "  The output is written to the console in the format 'Account name    SID as string   SID as hexadecimal'{0}" +
                   "  And can be written out to a file using standard PowerShell redirection{0}" +
                   "  Please specify user accounts in the format 'DOMAIN\username'{0}" +
                   "  Please specify machine accounts in the format 'DOMAIN\machinename$'{0}" +
                   "  For more help content, please run 'Get-Help ConvertToSID.ps1'{0}" +
                   "{0}====== Arguments ======{0}" +
    
    
    
                   "{0}  /?    Show this help message", [Environment]::NewLine)
    }
    else
    {
        #If an array was passed in, try to split it
        if($myArgs.Length -eq 1)
        {
            $myArgs = $myArgs.Split(' ')
        }
    
        #Parse the arguments for account names
        foreach($accountName in $myArgs)
        {
            [string[]] $splitString = $accountName.Split('\')  # We're looking for the format "DOMAIN\Account" so anything that does not match, we reject
    
            if($splitString.Length -ne 2)
            {
                $message = [string]::Format("{0} is not a valid account name. Expected format 'Domain\username' for user accounts or 'DOMAIN\machinename$' for machine accounts.", $accountName)
    
                Write-Error -Message $message
                continue
            }
    
            #Convert any account names to SIDs
            try
            {
                [System.Security.Principal.NTAccount] $account = New-Object System.Security.Principal.NTAccount($splitString[0], $splitString[1])
    
                [System.Security.Principal.SecurityIdentifier] $SID = [System.Security.Principal.SecurityIdentifier]($account.Translate([System.Security.Principal.SecurityIdentifier]))
            }
            catch [System.Security.Principal.IdentityNotMappedException]
            {
                $message = [string]::Format("Failed to translate account object '{0}' to a SID. Please verify that this is a valid user or machine account.", $account.ToString())
    
                Write-Error -Message $message
    
                continue
            }
    
            #Convert regular SID to binary format used by SQL
    
            $hexSIDString = ConvertSIDToHexFormat $SID
    
            $SIDs = New-Object PSObject
    
            $SIDs | Add-Member NoteProperty Account $accountName
    
            $SIDs | Add-Member NoteProperty SID $SID.ToString()
    
            $SIDs | Add-Member NoteProperty Hexadecimal $hexSIDString
    
            Write-Output $SIDs
        }
    }
    
  3. この手順の手順 1 で保存したスクリプトを実行し、アカウントを渡して引数として変換します。

    以下に例を示します。

    .\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 |Format-List" または "$accountsArray = @("DOMAIN\user_account1", "DOMAIN\machine_account1$", "DOMAIN_user_account2")

    .\ConvertToSID.ps1 $accountsArray |Write-Output -FilePath .\SIDs.txt -Width 200"

    App-V の問題が発生しましたか? App-V TechNet フォーラムを使用します。

PowerShell を使用した App-V の管理