远程锁定工作站不起作用,为什么?

时间:2012-09-27 21:33:56

标签: powershell powershell-v2.0

大约一年前,我发现了this PowerShell script

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 
}

我无法让它发挥作用。我得到各种奇怪的错误。它始于错误,无法找到终止“@,一旦我得到它修复它开始在TaskScheduler模块中抛出错误,特别是它无法加载类型[__ComObject](在几个TaskScheduler中使用)脚本,我找不到任何文档)。

我试图在PowerShell v2中使用它。

有人有任何想法吗?

编辑1:

所以我做了一些更多的测试,看起来技术上它正在工作(TaskScheduler模块中有一个错误导致它完全失败),但是尽管在远程工作站上安排了任务,执行该任务失败,有点。尽管拥有当前登录用户的凭据,但该任务经常会“运行”但没有结果。

编辑2: Downvotes?真?我遇到了问题,我已经描述了我得到的错误,而不是提出一个建议你倒下这个问题?这是什么,Reddit?

1 个答案:

答案 0 :(得分:0)

目前无法测试您的代码,但您可能希望使用更简单的方法(未经测试):

... | Add-TaskAction -Script { rundll32.exe user32.dll,LockWorkStation }