$fullnamexp = ((net user $winxp /domain | Select-String "Full Name") -replace "Full Name","").Trim();
如果找不到$winxp
,命令将挂起,是否有一个超时,我可以使用这个,使它在5-10秒后移动?我不确定我会把它放在哪里。
编辑-我用这个来拉取用户名:
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $tag1)
$key = $reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon')
$winxp = $key.GetValue('DefaultUserName') -replace '^.*?\\'
然后$winxp
是一个登录名,如ajstepanik
,然后我把它放入:$fullnamexp = ((net user $winxp /domain | Select-String "Full Name") -replace "Full Name","").Trim();
1.21.2014更新
$timeoutSeconds = 5
$code = {
((net user $winxp /domain | Select-String "Full Name") -replace "Full Name","").Trim(); # your commands here, e.g.
}
$j = Start-Job -ScriptBlock $code
if (Wait-Job $j -Timeout $timeoutSeconds) { $fullnamexp = Receive-Job $j }
Remove-Job -force $j
6条答案
按热度按时间qncylg1j1#
虽然@mjolinor可能确实为您提供了另一种方法,但以下是对您的一般问题的直接回答:* 如何在PowerShell中强制超时?*
将您希望进行时间限制的任何内容 Package 在脚本块中,将其作为作业运行,然后使用
Wait-Job
cmdlet对操作进行时间限制。Wait-Job
将在超时结束时 * 或脚本块完成时 * 返回,以 * 先发生者为准。在Wait-Job
返回之后,您可以检查作业状态($j.state
),以确定它是否被中断(如果对您有影响的话)。2014.01.18更新
这里有一个更精简的方法,其中还包括使用
Receive-Job
从脚本块中获取信息的实际步骤,假设您想要的是在stdout上生成的:62lalag42#
您可以使用Start-Sleep暂停脚本:
to94eoyn3#
net并不明确允许你在它的操作上设置超时,但是你可以查看这个链接来改变你的套接字的ipv4超时:
http://www.cyberciti.biz/tips/linux-increasing-or-decreasing-tcp-sockets-timeouts.html
我唯一能想到的是生成一个工作线程,但我甚至不知道这在bash中是否可能,我没有足够的流动性来回答这个问题;另外,它会让你面临同步问题和各种各样的多线程问题,这些问题超出了你在bash脚本中开始时试图快速完成的任务!:P
ff29svar4#
这样有用吗
pxy2qtax5#
这个解决方案对我不起作用。
remove-job -force $j
在这个例子中需要5秒。下面是一个简单的记事本超时示例:
oyxsuwqo6#