Condividi tramite


Come installare i database di App-V e convertire i relativi ID di sicurezza (SID) tramite PowerShell

Aggiornamento: novembre 2012

Si applica a: Application Virtualization 5.0, Application Virtualization 5.0 SP1, Application Virtualization 5.0 SP2, Application Virtualization 5.0 SP3

Usare la seguente procedura di PowerShell per convertire un numero qualsiasi di account utente o computer di Servizi di dominio Active Directory in ID di sicurezza (SID) formattati sia nel formato standard sia in quello esadecimale usato da Microsoft SQL Server durante l'esecuzione di script SQL.

Prima di eseguire questa procedura, leggere con attenzione le informazioni e gli esempi contenuti nel seguente elenco:

  • .INPUTS: uno o più account usati per la conversione nel formato SID. Può essere un singolo nome di account o una matrice di nomi di account.

  • .OUTPUTS: elenco di nomi di account con il SID corrispondente nei formati standard ed esadecimale.

  • Esempi:

    .\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

    #>

Per convertire un numero illimitato di account utente o computer di Servizi di dominio Active Directory in ID di sicurezza (SID) formattati

  1. Copiare il seguente script in un editor di testo e salvarlo come file di script di PowerShell, ad esempio ConvertToSIDs.ps1.

  2. Per aprire una console di PowerShell, fare clic sul pulsante Start e digitare PowerShell. Fare clic con il pulsante destro del mouse su Windows PowerShell e scegliere Esegui come amministratore.

    <#
    
    .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. Eseguire lo script salvato al passaggio 1 di questa procedura passando come argomenti gli account da convertire.

    Ad esempio:

    .\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”

    Come inviare suggerimenti per App-V? Aggiungere o votare i suggerimenti qui.
    Come ottenere supporto per un problema relativo ad App-V? Usare il forum di TechNet su App-V.

Vedere anche

Altre risorse

Amministrazione di App-V tramite PowerShell

-----
Per ulteriori informazioni su MDOP, è possibile accedere alla libreria TechNet, cercare contenuto sulla risoluzione di problemi in TechNet Wiki o tenersi informati tramite Facebook o Twitter.
-----