我有以下代码:
$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;
当我尝试使用字符串执行命令中的属性之一时:
& "$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'"
它试图只使用$DatabaseSettings
而不是价值$DatabaseSettings[0].DatabaseName
,这是无效的。
我的解决方法是将其复制到一个新变量中。
如何直接在双引号字符串中访问对象的属性?
当您将变量名称括在双引号字符串中时,它将被该变量的值替换:
$foo = 2
"$foo"
becomes
"2"
如果您不想这样做,则必须使用单引号:
$foo = 2
'$foo'
但是,如果要访问属性,或使用双引号字符串中变量的索引,则必须将该子表达式括在$()
:
$foo = 1,2,3
"$foo[1]" # yields "1 2 3[1]"
"$($foo[1])" # yields "2"
$bar = "abc"
"$bar.Length" # yields "abc.Length"
"$($bar.Length)" # yields "3"
PowerShell 仅在这些情况下扩展变量,仅此而已。要强制计算更复杂的表达式,包括索引、属性甚至完整的计算,您必须将它们括在子表达式运算符中$( )
这会导致内部表达式被计算并嵌入到字符串中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)