1

約 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 に答える