Powershell 这能在远程计算机上工作吗?
我一直在努力让它在远程计算机上工作,这可能吗?如果是这样,有人能给我指出正确的方向吗 代码如下:Powershell 这能在远程计算机上工作吗?,powershell,powershell-2.0,Powershell,Powershell 2.0,我一直在努力让它在远程计算机上工作,这可能吗?如果是这样,有人能给我指出正确的方向吗 代码如下: Function Lock-WorkStation { #Requires -Version 2.0 $signature = @" [DllImport("user32.dll", SetLastError = true)] public static extern bool LockWorkStati
Function Lock-WorkStation {
#Requires -Version 2.0
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
我不能在这里测试,但对我来说它无法工作,因为正如您在中所读到的,
lockstation
函数只能由交互式桌面上运行的进程调用。此外,用户必须登录
因此,据我所知,当您使用PSSession连接到远程计算机时,您不在交互式会话中。这是可能的。但是您需要一个变通方法来连接到交互式会话 下载并安装。您只需要一个名为“TaskScheduler”的模块 我已经测试了以下代码:
Function Lock-Workstation
{
param(
$Computername,
$Credential
)
if(!(get-module taskscheduler)){Import-Module TaskScheduler}
New-task -ComputerName $Computername -credential:$Credential |
Add-TaskTrigger -In (New-TimeSpan -Seconds 30) |
Add-TaskAction -Script `
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature `
-name "Win32LockWorkStation" `
-namespace Win32Functions `
-passthru
$LockWorkStation::LockWorkStation() | Out-Null
} | Register-ScheduledTask TestTask -ComputerName $Computername `
-credential:$Credential
}
您可以这样使用它:
Lock-Workstation "NameOfTheComputer" (Get-Credential)
或者像这样:
Lock-Workstation "NameOfTheComputer"
如果您在指定凭据时在Connect-ToTaskScheduler中收到错误,那是因为模块中有输入错误(编辑Connect-ToTaskScheduler.ps1并将“$NetworkCredentail.Domain”替换为“$NetworkCredential.Domain”与此无关,但在Windows Vista/7 2008/R2中,它会有所帮助,您可以使用命令
tsdiscon.exe
锁定远程桌面会话或您的工作站
下面是一个示例,在我的计算机上作为管理员域登录,我首先列出,然后锁定服务器上的控制台会话
PS> query session /server:WM2008R2ENT
SESSION UTILISATEUR ID ÉTAT TYPE PÉRIPHÉRIQUE
services 0 Déco
console jpb 2 Actif
PS> tsdiscon 2 /server:WM2008R2ENT
两个问题:1)您是否在运行Vista或更高版本系统的远程计算机上进行测试?2) 您是否真的使用远程计算机上登录的其他用户对其进行了测试?这意味着管理员可以使用taskscheduler在交互式桌面中插入代码。1)我从Windows 7工作站运行到Windows 2008 R2服务器。2) 两台计算机都有相同的用户登录。若要使用不同的凭据远程运行,您可以为new task和register-scheduledtask指定-credential。因此,您需要将用户的凭据登录到远程计算机上。这样我就明白了,谢谢WinFred。我不认为这是一个可操作的解决方案,但这个想法是+1。我想做的是能够将这个函数添加到一个模块中,然后像这样从控制台调用它:
锁定工作站comp1
,然后锁定名为comp1的计算机。我有一个功能可以用来强制注销,但理想情况下我只想锁定工作站。是的,PSremoting隔离远程会话。