脚本会关闭某些OU中的所有PC,如果它们在线超过2天。 我希望这个脚本在关闭PC之前向PC发送消息。
function Get-LastBootUpTime {
param (
$ComputerName
)
$OperatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName
[Management.ManagementDateTimeConverter]::ToDateTime($OperatingSystem.LastBootUpTime)
}
$Days = -0
$ShutdownDate = (Get-Date).adddays($days)
$ComputerList = Get-ADComputer -SearchBase 'OU=X,OU=X,DC=X,DC=X' ` -Filter '*' | Select -EXP Name
$A = Get-Date
Add-Content C:\Scripts\Shutdown\Report\shutdown.txt "`nDatum:" $A
$ComputerList | foreach {
$Bootup = Get-LastBootUpTime -ComputerName $_
Write-Output "$_ last booted: $Bootup" | tee -Append C:\Scripts\Shutdown\Report\shutdown.txt
if ($ShutdownDate -gt $Bootup) {
Write-Output "Rebooting Computer: $_" | tee -Append C:\Scripts\Shutdown\Report\shutdown.txt
}
else {
Write-Output "No need to reboot: $_" | tee -Append C:\Scripts\Shutdown\Report\shutdown.txt
}
}
但我无法弄明白......有人有想法吗?
答案 0 :(得分:0)
您可以使用Send-NetMessage脚本,或使用MSG命令
自行执行某些操作答案 1 :(得分:0)
Msg.exe用于向终端服务器用户发送消息,并从终端服务器本身发送。
在无法发送邮件的计算机上修改其注册表。
使用regedit导航至:
Name : AllowRemoteRPC
Type : REG_DWORD
Value : 1
更改以下值:
$RegKey ="HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server"
Get-ItemProperty -Path $RegKey -Name AllowRemoteRPC
Set-ItemProperty -Path $RegKey -Name AllowRemoteRPC -Value 1
Get-ItemProperty -Path $RegKey -Name AllowRemoteRPC
或使用以下powershell脚本
$msgScript = {
$Days = -2
$ShutdownDate = (Get-Date).adddays($days)
$ComputerList = Get-ADComputer -SearchBase 'OU=X,OU=X,DC=X,DC=X' ` -Filter '*' | Select -EXP Name
$A = Get-Date
$ComputerList | foreach {
$Bootup = Get-LastBootUpTime -ComputerName $_
if ($ShutdownDate -gt $Bootup) {
#send-msg
Send-NetMessage "Shutdown start in 5 minutes. Please log off." -Computername $_ -Seconds 0 -VerboseMsg -Wait
}
}
}
我建议提前发送邮件,例如5分钟即将关闭的用户。
发送消息的用户:
#load the scripts, note the dot at start of line
. .\Get-LastBootUpTime.ps1
. .\Send-NetMessage.ps1
$DELAYTIME=5 #minutes
Invoke-Command -ScriptBlock $SendMessage
# wait 5 minutes
Set-WaitTime $DELAYTIME #you can implement it
Invoke-Command -ScriptBlock $ShutDown
您可以通过延迟自动执行发送消息和关闭任务的任务,例如:
. the_path_to\Get-LastBootUpTime
. the path_to\Send-NetMessage
<强>更新强>
为了避免错误消息说Get-LastBootUpTime和Send-NetMessage不是cmdlet,您需要加载这些函数。 要加载这些函数,请运行以下代码:
. .\Get-LastBootUpTime.ps1
. .\Send-NetMessage.ps1
如果这些脚本在当前文件夹中
{{1}}
注意行开头的点