Share via


Installation des bases de données App-V et conversion des identificateurs de sécurité (SID) associés à l'aide de PowerShell

Mis à jour: septembre 2015

S'applique à: Application Virtualization 5.1

Pour convertir un nombre quelconque de comptes d'utilisateurs ou d'ordinateurs de services de domaine Active Directory (AD DS) en identificateurs de sécurité (SID) au format standard et au format hexadécimal utilisés par Microsoft SQL Server lors de l'exécution de scripts SQL, utilisez la procédure PowerShell suivante.

Avant d'effectuer cette procédure, vous devez lire et comprendre les informations et les exemples figurant dans la liste suivante :

  • .INPUTS : le ou les comptes utilisés pour convertir au format SID. Il peut s'agir d'un nom de compte unique ou d'un groupe de noms de compte.

  • .OUTPUTS : liste de noms de compte avec le SID correspondant aux formats standard et hexadécimal.

  • Exemples :

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

    #>

Pour convertir un nombre quelconque de comptes d'utilisateurs ou d'ordinateurs de services de domaine Active Directory (AD DS) en identificateurs de sécurité (SID) mis en forme

  1. Copiez le script suivant dans un éditeur de texte, puis enregistrez-le sous la forme d'un fichier de script PowerShell, par exempleConvertToSIDs.ps1.

    <#
    .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
        }
    }
    
  2. Pour ouvrir une console PowerShell, cliquez sur Démarrer, puis tapez PowerShell. Cliquez avec le bouton droit sur Windows PowerShell, puis sélectionnez Exécuter en tant qu'administrateur.

  3. Exécutez le script que vous avez enregistré à l'étape 1 de cette procédure en passant les comptes à convertir en tant qu'arguments.

    Par exemple,

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

    Vous avez une suggestion pour App-V ? Ajoutez des suggestions ou votez pour les meilleures ici.
    Vous avez un problème avec App-V ? Utilisez le Forum TechNet App-V.

Voir aussi

Autres ressources

Administration d'App-V 5.1 à l'aide de PowerShell

-----
Vous pouvez en apprendre plus sur MDOP dans Bibliothèque TechNet, rechercher des solutions à des problèmes dans le TechNet Wiki ou nous suivre sur Facebook ou Twitter.
-----