139 votes

Comment pouvez-vous utiliser la propriété d'un objet dans une chaîne entre guillemets ?

J'ai le code suivant :

$DatabaseSettings = @();
$NewDatabaseSetting = "" | select DatabaseName, DataFile, LogFile, LiveBackupPath;
$NewDatabaseSetting.DatabaseName = "LiveEmployees_PD";
$NewDatabaseSetting.DataFile = "LiveEmployees_PD_Data";
$NewDatabaseSetting.LogFile = "LiveEmployees_PD_Log";
$NewDatabaseSetting.LiveBackupPath = '\\LiveServer\LiveEmployeesBackups';
$DatabaseSettings += $NewDatabaseSetting;

Lorsque j'essaie d'utiliser l'une des propriétés d'une commande d'exécution de chaîne de caractères :

& "$SQlBackupExePath\SQLBackupC.exe" -I $InstanceName -SQL `
  "RESTORE DATABASE $DatabaseSettings[0].DatabaseName FROM DISK = '$tempPath\$LatestFullBackupFile' WITH NORECOVERY, REPLACE, MOVE '$DataFileName' TO '$DataFilegroupFolder\$DataFileName.mdf', MOVE '$LogFileName' TO '$LogFilegroupFolder\$LogFileName.ldf'"

Il essaie simplement d'utiliser la valeur de $DatabaseSettings plutôt que la valeur de $DatabaseSettings[0].DatabaseName, qui n'est pas valide.
Ma solution de contournement est de le faire copier dans une nouvelle variable.

Comment puis-je accéder directement à la propriété de l'objet dans une chaîne entre guillemets ?

11voto

loonison101 Points 170

@Joey a une bonne réponse. Il y a une autre façon avec un look plus .NET avec un équivalent String.Format, je le préfère quand j'accède à des propriétés sur des objets :

Choses à propos d'une voiture :

$properties = @{ 'color'='red'; 'type'='sedan'; 'package'='fully loaded'; }

Créer un objet :

$car = New-Object -typename psobject -Property $properties

Interpoler une chaîne :

"The {0} car is a nice {1} that is {2}" -f $car.color, $car.type, $car.package

Extrants :

# The red car is a nice sedan that is fully loaded

7voto

Ramandeep Singh Points 31

Si vous souhaitez utiliser des propriétés dans les guillemets, procédez comme suit. Vous devez utiliser $ en dehors de la parenthèse pour imprimer la propriété.

$($variable.property)

Exemple :

$uninstall= Get-WmiObject -ClassName Win32_Product |
    Where-Object {$_.Name -like "Google Chrome"

Sortie :

IdentifyingNumber : {57CF5E58-9311-303D-9241-8CB73E340963}
Name              : Google Chrome
Vendor            : Google LLC
Version           : 95.0.4638.54
Caption           : Google Chrome

Si vous ne voulez que la propriété name, procédez comme suit :

"$($uninstall.name) Found and triggered uninstall"

Sortie :

Google Chrome Found and triggered uninstall

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X