我有一个PowerShell 1.0脚本来打开一堆应用程序.第一个是虚拟机,其他是开发应用程序.我希望虚拟机在其他应用程序打开之前完成启动.
在bash我可以说 "cmd1 && cmd2"
这就是我所拥有的......
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来计算PowerShell中命令的执行时间,比如Linux中的'time'命令?
我想出了这个:
$s=Get-Date; .\do_something.ps1 ; $e=Get-Date; ($e - $s).TotalSeconds
Run Code Online (Sandbox Code Playgroud)
但我想要更简单的东西
time .\do_something.ps1
Run Code Online (Sandbox Code Playgroud) 我正在批处理文件中运行PowerShell脚本.该脚本获取一个网页并检查该页面的内容是否为字符串"OK".
PowerShell脚本向批处理脚本返回错误级别.
批处理脚本由ScriptFTP执行,ScriptFTP是一个FTP自动化程序.如果发生错误,我可以让ScriptFTP通过电子邮件将完整的控制台输出发送给管理员.
在PowerShell脚本中,如果它不是"OK",我想从网站输出返回值,因此错误消息包含在控制台输出中,因此也包含在状态邮件中.
我是PowerShell的新手,不知道要使用哪个输出函数.我可以看到三个:
用什么来写Windows等价的东西是正确的stdout?
如何在PowerShell中执行如下命令并将其拆分为多行?
&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" -dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"
Run Code Online (Sandbox Code Playgroud) 我可以通过以下方案表达我的需求:编写一个接受字符串的函数作为本机命令运行.
这并不是一个想法:如果你正在与公司其他地方的其他命令行实用程序连接,那么它将为你提供逐字运行的命令.因为您不控制命令,所以您需要接受任何有效的命令作为输入.这些是我无法轻易克服的主要问题:
该命令可能执行生活在其中包含空格的路径中的程序:
$command = '"C:\Program Files\TheProg\Runit.exe" Hello';
Run Code Online (Sandbox Code Playgroud)该命令可能包含带空格的参数:
$command = 'echo "hello world!"';
Run Code Online (Sandbox Code Playgroud)该命令可能包含单蜱和双蜱:
$command = "echo `"it`'s`"";
Run Code Online (Sandbox Code Playgroud)有没有干净的方法来完成这个?我只能设计出奢华和丑陋的变通方法,但对于脚本语言,我觉得这应该是简单的.
我想提示用户输入一系列输入,包括密码和文件名.
我有一个使用的例子host.ui.prompt,这似乎是明智的,但我无法理解回报.
有没有更好的方法来获得PowerShell中的用户输入?
这应该是一个简单的任务,但我已经看到了几次尝试如何获取执行cmdlet所在目录的路径,并取得了成功.例如,当我执行C:\temp\myscripts\mycmdlet.ps1哪个有设置文件时,C:\temp\myscripts\settings.xml我希望能够存储C:\temp\myscripts在一个变量中mycmdlet.ps1.
这是一个有效的解决方案(虽然有点麻烦):
$invocation = (Get-Variable MyInvocation).Value
$directorypath = Split-Path $invocation.MyCommand.Path
$settingspath = $directorypath + '\settings.xml'
Run Code Online (Sandbox Code Playgroud)
另一个人建议这个解决方案只适用于我们的测试环境:
$settingspath = '.\settings.xml'
Run Code Online (Sandbox Code Playgroud)
我非常喜欢后一种方法,并且更喜欢每次都必须将文件路径解析为参数,但我不能让它在我的开发环境中工作.有没有人建议做什么?它与PowerShell的配置方式有关吗?
似乎有许多不同的输出消息的方法.是通过什么东西输出之间的有效差异Write-Host,Write-Output或[console]::WriteLine?
我还注意到,如果我使用:
write-host "count=" + $count
Run Code Online (Sandbox Code Playgroud)
将+被包括在输出.为什么?在写出之前,是否应该对表达式进行求值以生成单个连接字符串?
我有一个PowerShell脚本,我想将输出重定向到一个文件.问题是我无法改变调用此脚本的方式.所以我做不到:
.\MyScript.ps1 > output.txt
Run Code Online (Sandbox Code Playgroud)
如何在执行期间重定向PowerShell脚本的输出?
据我所知,PowerShell似乎没有所谓的三元运算符的内置表达式.
例如,在支持三元运算符的C语言中,我可以编写如下内容:
<condition> ? <condition-is-true> : <condition-is-false>;
Run Code Online (Sandbox Code Playgroud)
如果在PowerShell中确实不存在,那么实现相同结果的最佳方法(即易于阅读和维护)是什么?