PowerShell を使用して App-V データベースをインストールし、関連するセキュリティ ID を変換する方法
適用対象: Application Virtualization 5.1
次の PowerShell の手順を使用して、Active Directory ドメイン サービス (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 ドメイン サービス (AD DS) のユーザーまたはコンピューターのアカウントを形式が設定されたセキュリティ識別子 (SID) に変換するには
次のスクリプトをテキスト エディターにコピーして、ConvertToSIDs.ps1 のように 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 } }
PowerShell コンソールを開くには、[スタート] をクリックし、「PowerShell」と入力します。[Windows PowerShell] を右クリックし、[管理者として実行] を選択します。
この手順の手順 1 で保存したスクリプトを実行して、引数として変換するためにアカウントを渡します。
例:
.\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 | Format-List” or “$accountsArray = @("DOMAIN\user_account1", "DOMAIN\machine_account1$", "DOMAIN_user_account2")
.\ConvertToSID.ps1 $accountsArray | Write-Output -FilePath .\SIDs.txt -Width 200”
APP-V への提案がございますか。こちらから提案を追加するか、提案に投票してください。
App-V に関する問題がありますか。「APP-V に関する TechNet フォーラム」を利用してください。
関連項目
その他の参照情報
PowerShell を使用して App-V 5.1 を管理する
-----
MDOP の詳細については、TechNet ライブラリを参照してください。TechNet Wiki では、トラブルシューティング情報を検索できます。また、Microsoft の Facebook と Twitter をフォローすることをお勧めします。
-----