【问题标题】:Logging off Remote user via PowerShell [duplicate]通过 PowerShell 注销远程用户 [重复]
【发布时间】:2020-12-01 07:05:58
【问题描述】:

我知道还有其他方法(可能更容易)来完成这项工作......我的问题是为什么在使用变量而不是会话 ID(即 1、2、3)时出现错误/p>

cls
$pc = Read-Host "Computer Name: "
echo $pc
Get-Service -Name WinRM -ComputerName $pc | Set-Service -Status Running
Invoke-Command -ComputerName $pc -ScriptBlock { quser }
$session = Read-Host "Session ID: "
$session = $session -as [int]
echo $session
Invoke-Command -ComputerName $pc -ScriptBlock { logoff $session }

如果我跑步:

Invoke-Command -ComputerName $pc -ScriptBlock { logoff 1 }

我没有收到任何错误...有什么简单的方法可以让它与我当前的脚本一起工作?

提前谢谢你!

【问题讨论】:

  • 我把它改成了:Invoke-Command -ComputerName $pc -ArgumentList $session -ScriptBlock { logoff $session } 但得到同样的错误...谢谢...
  • 是的,它不是这么说的。如果你想传入参数,那么你需要使用参数块来指定你自己的变量或args[0] - 或者就像那里的答案说使用$using:session

标签: powershell


【解决方案1】:

您有多种选择。

使用 using 范围修饰符

Invoke-Command -ComputerName $pc -ScriptBlock { logoff $using:session }

-ArgumentList 与您自己定义的参数一起使用。为方便起见,它们在这里命名相同,param 语句可以有任何变量名*。

Invoke-Command -ComputerName $pc -ScriptBlock {Param($session) logoff $session} -argumentlist $session

-ArgumentList 与自动args 变量一起使用。因为这是您使用[0] 引用的第一个参数

Invoke-Command -ComputerName $pc -ScriptBlock {logoff $args[0]} -argumentlist $session

*任何非自动或保留的变量名称

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多