这是我的脚本:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force
$passwd = ConvertTo-SecureString -AsPlainText -Force -String PASSWORD #Remplacer 'Password' par votre Mot de passe Datacenter
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "LOGIN",$passwd #Remplacer 'login' par votre login datacenter
$Server = Read-Host -Prompt 'Veuillez entrer le nom du serveur'
$session = New-PSSession -ComputerName $Server -Credential $cred
$Service = Read-Host -Prompt 'Veuillez entrer le nom du service'
Invoke-Command -Session $session -ScriptBlock {$A = get-service -Name $Service}
if ($A.Status -eq "Stopped") {$A.start()}
elseIf ($A.status -eq "Running") {Write-Host -ForegroundColor Yellow $A.name "is running"}
Get-PSSession | Remove-PSSession
我的脚本几乎可以正常工作,但是我遇到了“错误”或错过了一些东西。 当我使用提示符获取服务器名称$ Server并将其放在变量中时,一切正常。 但是,当我使用提示符在变量$ Service中获取服务名称,并使用get-service -name $ Service时,它不起作用。 为什么? 你能帮我吗?
答案 0 :(得分:2)
您的问题不是Get-Service
,而是Invoke-Command
。您使用的变量$Service
不会从会话传递给调用的命令。有多种方法可以做到这一点:
通过参数(如评论中提到的Paxz):
-ScriptBlock {param($Service) $A = get-service -Name $Service} -ArgumentList $Service
通过using:
:
-ScriptBlock {$A = get-service -Name $using:Service}
直接通过参数:
-ScriptBlock {$A = get-service -Name $args[0]} -ArgumentList $Service
还要在尝试重新启动变量时记住变量的范围。
一些有用的链接,用于检查何时将变量传递到远程会话: