大约一年前,我发现了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?
答案 0 :(得分:0)
目前无法测试您的代码,但您可能希望使用更简单的方法(未经测试):
... | Add-TaskAction -Script { rundll32.exe user32.dll,LockWorkStation }