1

大约一年前,我发现了这个 PowerShell 脚本

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:否决票?真的吗?我遇到了问题,我已经描述了我遇到的错误,而不是提供建议您否决了这个问题?这是什么,Reddit?

4

1 回答 1

0

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

... | Add-TaskAction -Script { rundll32.exe user32.dll,LockWorkStation }
于 2012-09-27T22:28:07.023 回答