Como instalar as bases de dados app-V e converter os identificadores de segurança associados com o Windows PowerShell
Aplica-se a: Windows 10, Windows 11, Windows Server 2016
Utilize o seguinte procedimento do Windows PowerShell para converter qualquer número de contas de utilizador ou computador dos Serviços de Domínio do Active Directory (AD DS) em Identificadores de Segurança (SIDs) formatados no formato padrão e no formato hexadecimal utilizado pelo Microsoft SQL Server ao executar scripts SQL.
Antes de tentar este procedimento, deve ler e compreender as informações e os exemplos apresentados na lista seguinte:
. ENTRADAS: a conta ou contas utilizadas para converter em formato SID. Este item pode ser um único nome de conta ou uma matriz de nomes de conta.
. SAÍDAS: uma lista de nomes de contas com o SID correspondente em formatos padrão e hexadecimais.
Exemplos:
.\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 | Formatar Lista.
$accountsArray = @("DOMÍNIO\user_account1", "DOMÍNIO\machine_account1$", "DOMAIN_user_account2")
.\ConvertToSID.ps1 $accountsArray | Write-Output -FilePath .\SIDs.txt -Width 200
#>
Para converter qualquer número de contas de utilizador ou de computador dos Serviços de Domínio do Active Directory (AD DS) em Identificadores de Segurança (SIDs) formatados
Copie o seguinte script para um editor de texto e guarde-o como um ficheiro de script do Windows PowerShell, por exemplo ,ConvertToSIDs.ps1.
Para abrir uma consola do Windows PowerShell, clique em Iniciar e escreva PowerShell. Clique com o botão direito do mouse em Windows PowerShell e selecione Executar como Administrador.
<# .SYNOPSIS This Windows 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 Windows 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 Windows 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 } }
Execute o script que guardou no Passo 1 deste procedimento ao transmitir as contas para converter como argumentos.
Por exemplo,
.\ConvertToSID.ps1 DOMAIN\user_account1 DOMAIN\machine_account1$ DOMAIN\user_account2 | Format-List" ou "$accountsArray = @("DOMAIN\user_account1", "DOMAIN\machine_account1$", "DOMAIN_user_account2")
.\ConvertToSID.ps1 $accountsArray | Write-Output -FilePath .\SIDs.txt -Width 200"