2016-08-23 11 views
0

ここに文字列(@"E-mail text"@)を含むコード内の電子メールのテキストをハードコードする代わりに、私たちのスクリプトの入力ファイルを作成しようとしています。しかし、$MyVariableのように単純ではなく単純ではないが、$MyVariable.User.Nameのように対処する必要がある変数を設定するのは本当に難しいようです。ファイル内の変数を展開する

とにかく、以下のコードは問題を示しています。 VARを使用することが可能であるどのように

HTML入力ファイル

Dear $($Object.User.GivenName) 
Thank you for joining the program. 

コード

$SamAccountNameManager = 'Mike' 
$SamAccountNameUser = 'Bob' 
$File = 'C:\Test.html' 

$Object = [PSCustomObject]@{ 
    User = Get-ADUser $SamAccountNameUser -Properties GivenName 
    Manager = Get-ADUser $SamAccountNameManager -Properties GivenName 
} 

$Template = Get-Content $File 
$ExecutionContext.InvokeCommand.ExpandString($Template) 

エラー

Exception calling "ExpandString" with "1" argument(s): "Object reference not set to an instance of an obj 
ect." 

ible $Object.User.GivenNameをテキストファイルに入れ、適切な値を入力してください。

+0

私は(テストPowerShellの特定の例からエラーを再現することはできません。基本的に、物事はあなたが望む方法を使用すると、個々の変数

$GivenName = Get-ADUser $SamAccountNameUser -Properties GivenName | Select-Object -Expand GivenName $Manager = Get-ADUser $SamAccountNameManager -Properties GivenName | Select-Object -Expand GivenName $Template = Get-Content $File | Out-String $ExecutionContext.InvokeCommand.ExpandString($Template) 

を作成して、テンプレートのものを使用する必要が動作するように2および5)。 –

+0

もう一度試してみてください。同じエラーが出ています。 Windows Server 2012でPowerShell 4.0を使用する。 – DarkLite1

答えて

0

$ExecutionContext.InvokeCommand.ExpandString()は、文字列内の変数を展開します。複雑な式は評価されません。

Dear $GivenName 
Thank you for joining the program.
+0

非常に奇妙です.Dear $(5 * 5)のような計算をしようとするとうまくいきます。ドット付きの変数でない場合のみ...本当の解決策がない場合は、あなたの回避策が唯一の方法だと思います。お手伝いありがとう。 – DarkLite1

+0

"@' "' n $ Templateを使用して回避策を見つけました(こちら[http://stackoverflow.com/questions/11605772/why-doesnt-hash-key-syntax-work-inside-the-expandstring-method] 'n'" @ "| Invoke-Expression。 – DarkLite1

+1

'Invoke-Expression'は任意のコードを実行するので、これを行うことはお勧めしません。 –

関連する問題