1
我慚愧地抄襲了@mjolinor給出的答案,here,它的工作原理直到我用$FunctionName
替換copy-fileHC
。我需要能夠傳遞函數的名稱作爲變量調用。
我想我被抓出來,因爲腳本塊不能'看到'$ 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:Test-Function
與function:$FunctionName
不起作用。它根本沒有看到該功能。 $腳本塊的輸出看起來像:
.{} -Number: 35.4 -Contents: 'Some new text. 003'
當它工作的整體功能是{}
裏面打印出來。
在上一個類似的question of mine中,@Daryl在函數名稱中有一個問題,因此爲了測試,我將Test-Function重命名爲TestFunction,但無濟於事。
我會很感激任何建議/想法。
(PS V 5.1的/贏10)