@mjolinor、hereによって与えられた答えの一部を恥知らずに剽窃しています。copy-fileHC
を$FunctionName
に置き換えるまで機能します。変数として呼び出す関数の名前を渡すことができる必要があります。
私はスクリプトブロックが$ FunctionName変数を '見ることができないので、私はキャッチされていると思いますが、それを動作させる方法がわかりません。私は別にparam($functionName)
を通過しようとしましたが、それでも動作しません。ここで
(つまり作品)これまでの私のスクリプトです:
Function Invoke-FunctionRunAs
{
[cmdletbinding()]
Param
(
[string]$FunctionName,
[HashTable]$FunctionParameters,
[System.Management.Automation.CredentialAttribute()]$Credentials
)
$CallingUser = [Security.Principal.WindowsIdentity]::GetCurrent().Name
$RunAsDomain = $credentials.GetNetworkCredential().Domain
$RunAsUser = $Credentials.GetNetworkCredential().username
if(-not($RunAsDomain))
{
$RunAsDomain = "."
}
#$functionParameters.Add('FunctionName', $FunctionName)
Write-Verbose "Calling user: $CallingUser"
Write-Verbose "Attempting to run scriptblock as $RunAsDomain\$RunAsUser"
Write-Verbose "Called function: $functionName"
Write-Verbose ("Passed parameters: $($FunctionParameters | Out-String)")
#$FunctionName = "Function:$FunctionName"
$ScriptBlock = [scriptblock]::Create(".{${Function:Test-Function}} $(&{$args}@FunctionParameters)") #https://stackoverflow.com/questions/28234509/powershell-splatting-the-argumentlist-on-invoke-command
$ScriptBlock
Invoke-Command -ComputerName . -Credential $credentials -ScriptBlock $ScriptBlock #-ArgumentList $FunctionName
}
そしてこうして呼ば:
$params = @{
Contents = "'Some new text. 003'"
Number = 3.54*10
}
$credential = New-Object System.Management.Automation.PSCredential('COMPUTER\SomeUser',(ConvertTo-SecureString 'SomeUserPassword' -AsPlainText -Force))
Invoke-FunctionRunAs -FunctionName "Test-Function" -FunctionParameters $params -Credentials $credential -Verbose
しかし、function:$FunctionName
でfunction:Test-Function
を交換することはできません。この関数はまったく表示されません。それは全体の機能が{}
の内側にプリントアウトされた作品とき
.{} -Number: 35.4 -Contents: 'Some new text. 003'
:$スクリプトブロックの出力は次のようになります。
以前のように、@Darylは関数名のハイフンに問題がありました。テストするために、Test-Functionの名前をTestFunctionに変更しましたが、役に立たなかった。
私はどんな提案/アイデアにも感謝します。
(PS V 5.1 /勝利10)