用户会间歇性地遇到极端的登录时间(10 分钟)。我工作的公司目前不使用站点,因此用户可以从美国各地的 DC 进行身份验证或申请 GP。经过一番研究,我能够开发一个可以捕获有用信息的 powershell 脚本 - 脚本如下。无论如何,我将脚本复制到了各种机器上。现在我只需要能够根据需要远程运行脚本。我为 PS 脚本创建了一个快捷方式,以绕过执行策略设置(当前为默认设置)。我尝试使用 psexec.exe 和 powershell 执行快捷方式,但都无法正常工作。
执行程序
psexec $computer -u $user $file
错误:PsExec 无法在 $computer 上启动 $file:系统找不到指定的文件。
同时,我可以在本地双击快捷方式,并且它可以正常工作。
电源外壳
PS [Local Computer]>Enter-PSSession -ComputerName $computer -Credential $user
PS [Remote Computer]>cmd /c $file
错误:在远程服务器上启动命令失败,并显示以下错误消息:由于线程退出或应用程序请求,I/O 操作已中止...
脚本
$USER = $env:username.ToUpper()
$COMPUTER = $env:computername.ToUpper()
$Current_Time = Get-Date
$PCname = ''
$addedtime = 0
$LogonServer = $env:logonserver
$GPApplied = cmd /c gpresult /r | find "Last time Group Policy was applied"
$GPServer = cmd /c gpresult /r | find "Group Policy was applied from"
$LogonInfo = "C:\Temp\LogonDurations.txt"
$GPApplied = $GPApplied.TrimStart()
$GPServer = $GPServer.TrimStart()
#Get event time of last successful logon
$filterXML = @'
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Winlogon'] and (Level=4 or Level=0) and (EventID=7001)]]</Select>
</Query>
</QueryList>
'@
$LogonDateTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML -ErrorAction SilentlyContinue).timecreated
#Get Win License validated after logon (about same time as explorer loads)
$filterXML = @'
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[Provider[@Name='Microsoft-Windows-Winlogon'] and (Level=4 or Level=0) and (EventID=4101)]]</Select>
</Query>
</QueryList>
'@
$DesktopTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).timecreated
#Get Logon Duration
$LogonDuration = "{0:N1}" -f ((($DesktopTime - $LogonDateTime).TotalSeconds + $addedtime)/60)
$output = @"
------------------------------------------------------------------
$COMPUTER $Current_Time
------------------------------------------------------------------
Logon Server: $logonserver
$GPApplied
$GPServer
Successful Logon @ $LogonDateTime
Desktop Appeared @ $DesktopTime
Duration of Logon = $LogonDuration minutes
"@
$output | out-file -FilePath $logoninfo -Append
答案1
这是我使用的方法,效果非常好:
PSEXEC \\MachineName -u 用户名 -p 密码 -w WorkingFolder powershell.exe -ExecutionPolicy Bypass -Command FullPathToScript.ps1
鉴于重新格式化的问题(感谢 HBruijn),当您调用 PSEXEC 时,它试图从某个未知的工作文件夹运行 $file。使用 PSEXEC 命令行上的 -w 开关将其设置为远程计算机上 ps1 所在的文件夹。假设权限在其他方面都一致,那么您应该可以成功执行。
我实际使用 PSEXEC 调用 PowerShell 本身的原因是为了确保设置了 ExecutionPolicy。这与我设置工作文件夹然后完全限定 ps1 路径的原因大致相同。我尝试尽可能明确地说明,以便在出现问题时帮助排除故障。