提前致謝!
我發現這段代碼可以將正在運行的行程(記事本)帶到前臺
(New-Object -ComObject WScript.Shell).AppActivate((get-process notepad).MainWindowTitle)
以上僅適用于我的本地計算機,我想在當前登錄用戶的遠程計算機上運行它...
我還有一個列舉遠程計算機上的會話的腳本,在這個例子中,我可以選擇讓會話 1,它會注銷該用戶會話。
$pc = Read-Host "Computer Name"
echo $pc
Invoke-Command -ComputerName $pc -ScriptBlock { quser } -ErrorAction SilentlyContinue
$session = Read-Host "Session ID: (enter to quit)" -ErrorAction SilentlyContinue
If (!$session)
{
echo "No Sessions found"
Exit
}
Invoke-Command -ComputerName $pc -ScriptBlock { logoff $using:session } -ErrorAction SilentlyContinue
我可以以某種方式做類似的事情,獲取會話 ID 并使用它來運行 top 命令以將記事本帶到前面,或者任何其他/更簡單的方法來完成它?
太感謝了!
uj5u.com熱心網友回復:
就像我自己和最偉大的 Bender一樣,您可以采用計劃任務路線在用戶背景關系下運行它:
try {
$command = "(New-Object -ComObject WScript.Shell).AppActivate((get-process notepad).MainWindowTitle)"
$computer = $env:COMPUTERNAME
if (Test-Connection -ComputerName $Computer -Count 1 -ErrorAction "Stop") {
$username = Get-CimInstance -ClassName "Win32_ComputerSystem" -ComputerName $computer | Select-Object -ExpandProperty UserName
if (-not$Username) {
Write-Output -InputObject "No user logged into: $Computer."
Break
}
else {
Write-Verbose -Message "Current logged in user: $Username."
Invoke-Command -ScriptBlock {
$time = (Get-Date).AddMinutes(2).ToString("HH:mm")
#The name of your scheduled task.
$taskName = "MainWindow"
#Task description.
$description = "Bring notepad to front."
#Task action - what it should do.
$taskAction = New-ScheduledTaskAction -Execute 'PowerShell.exe' `
-Argument "-Command $using:command"
#Task trigger
$taskTrigger = New-ScheduledTaskTrigger -At $time -Once
#Register the scheduled task.
Register-ScheduledTask -TaskName $taskName `
-Description $description `
-Action $taskAction `
-User $using:username #| Out-Null
#Run the task
Start-ScheduledTask -TaskPath $taskName #| Out-Null
#optional timer
#Start-Sleep -Seconds 1
#Remove the newly created task since it's done running
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
} -ComputerName $computer
}
}
}
catch {
Write-Output -InputObject $_.Exception.Message
}
您可能必須洗掉任務計劃程式用戶名中的前置域才能正確找到 AD 中的用戶(之前遇到此問題 - 應該可以作業)。如您所見,這是一個乏味的程序,但是可以完成。最大的麻煩是試圖將它們拼湊在一起,因為它可能會變得有點混亂。
如果您有時間,我建議將其轉換為一個接受-Command, 和-FilePath引數的函式,以備將來使用以及穩健性。
我還沒有測驗過,但我不明白為什么它不起作用。根據您的環境,您可能必須提供管理憑據,但是,在使用 Kerberos 時,您應該很好;只要您的會話以管理員身份運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437602.html
標籤:电源外壳
上一篇:如何在此字串中添加引號
