Можно ли это сделать для работы на удаленном компьютере? - PullRequest
3 голосов
/ 18 мая 2011

Я убивал себя, пытаясь заставить это работать на удаленном компьютере, это вообще возможно?Если так, может кто-нибудь направить меня в правильном направлении?

Вот код:

    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 
    }

Ответы [ 3 ]

1 голос
/ 18 мая 2011

Это возможно. Но для подключения к интерактивному сеансу требуется обходной путь.

Загрузите PowerShellPack и установите его. Вам нужен только один модуль с именем «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,"

1 голос
/ 19 мая 2011

Ничего общего с этим, но это может помочь в 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 голос
/ 18 мая 2011

Я не могу проверить здесь, но для меня это НЕ может работать, потому что, как вы можете прочитать в документации Microsoft , функция LockWorkStation может вызываться только процессами, выполняющимися на интерактивном рабочем столе.Кроме того, пользователь должен войти в систему.

Поэтому при подключении к удаленному компьютеру с использованием PSSession, насколько я понимаю, вы не участвуете в интерактивном сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...