1. ホーム
  2. powershell

[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?

2022-07-27 01:51:10

質問内容

次のようなコードがあります。

$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"

になる

"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 はこれらのケースで変数を展開するだけで、それ以上のことは行いません。インデックス、プロパティ、あるいは完全な計算など、より複雑な式を強制的に評価するには、それらを部分式演算子で囲む必要があります。 $( ) で囲む必要があります。これにより、中の式が評価され、文字列に埋め込まれます。