Articles of PowerShell的

PowerShell从命令行参数中剥离双引号

最近我一直在使用PowerShell中的GnuWin32时遇到一些麻烦,只要涉及到双引号。 经过进一步的调查,看来PowerShell从命令行参数中剥离了双引号,即使正确转义也是如此。 PS C:\Documents and Settings\Nick> echo '"hello"' "hello" PS C:\Documents and Settings\Nick> echo.exe '"hello"' hello PS C:\Documents and Settings\Nick> echo.exe '\"hello\"' "hello" 请注意,当传递给PowerShell的echo cmdlet时,双引号是存在的,但是当作为parameter passing给echo.exe时 ,除非用反斜线转义(即使PowerShell的转义字符是反引号,而不是反斜线),否则双引号将被剥离。 这对我来说似乎是一个错误。 如果我将正确的转义string传递给PowerShell,那么PowerShell应该处理任何转义可能是必要的,但是它调用该命令。 这里发生了什么? 目前,解决方法是根据这些规则来逃避命令行参数(这些规则似乎被PowerShell用来调用.exe文件的CreateProcess API调用所使用): 要传递一个双引号,用反斜线转义: \" – > " 要传递一个或多个反斜杠,然后加双引号,用另一个反斜杠转义每个反斜杠,然后转义引号: \\\\\" – > \\" 如果后面没有双引号,则反斜杠不需要转义: \\ – > \\ 请注意,进一步转义双引号可能需要将Windows API转义string中的双引号转义为PowerShell。 下面是一些使用GnuWin32的echo.exe的例子: PS C:\Documents and Settings\Nick> echo.exe […]

将string$variables传递给invoke-command scriptblock参数-name

我目前正在编写一个相对简单的PowerShell脚本来重启/停止/启动远程机器上的服务。 在我决定在Invoke-Command Scriptblock中将一个$Servicevariables传递给-Name参数之前,一切正常。 我知道我做错了什么或忘记了一些东西,但是你的帮助将不胜感激。 这里是部分代码给我突出的问题 [CmdletBinding()] Param([Parameter(Mandatory=$True,Position=1)] [string]$Server, [Parameter(Mandatory=$True)] [string]$Service) get-service -ComputerName $Server -Name "$Service" Write-Host("————————————————") Write-Host("Execute action on selected service: ") Write-Host("1. Restart service ") Write-Host("2. Stop service ") Write-Host("3. Start service") $choice = Read-Host -Prompt "Your choice" switch ($choice) { 1 {Invoke-command -Computername $Server {Restart-Service -Name "$Service" } } 2 {Invoke-command -ComputerName $Server […]

通过PowerShell创build具有path组件的registry项

对于传统应用程序,我需要创build一个名称为c:/foo/bar/baz的registry项。 (注:正斜杠,不反斜杠)要清楚:这是一个单一的键的名称,正斜杠,否则看起来像一个Windowspath。 因为我需要对很多服务器进行脚本编写,所以PowerShell看起来是一个很好的select。 问题是,我不知道如何通过PowerShell创build一个格式的密钥。 New-Item -Path HKLM:\SOFTWARE\Some\Key -Name 'c:/foo/bar/baz'错误与PowerShell认为我正在使用/作为path分隔符,无法findpathHKLM:\Software\Some\Key\c:\foo\bar ,确实不存在(也不应该)。 我无法find任何其他方式(ab)使用New-Item来获得我想要的。 有什么我失踪,或者我应该放弃,只是生成和加载registry转储的老式的方式?

如何从PowerShell中访问Web服务?

我想从Windows PowerShell中使用给定的(简单的)WSDL访问Web服务。 是否有捷径可寻?

我可以使这个剧本更快吗?

我为实习编写了一个简单的脚本,通过提供的目录浏览并删除任何超过指定天数的文件。 我已经花了我所有的空闲时间,试图收紧。 这是迄今为止我所得到的: function delOld($dir, $numDays){ $timespan = new-timespan -days $numDays $curTime = get-date get-childItem $dir -Recurse -file | where-object {(($curTime)-($_.LastWriteTime)) -gt $timespan} | remove-Item -whatif } 这是一个函数调用的例子: delOld -dir "C:\Users\me\Desktop\psproject" -numDays 5 对于阅读的难点,我发现将这些操作压缩成一行比将它们重新分配给每个迭代的易读variables更有效率。 为了testing目的,删除项目目前已被删除。 我知道,在这一点上,我可能无法加速太多,但是,我正在运行一个TB文件,所以每个操作都很重要。 预先感谢您提供的任何build议!

焦点IE浏览器窗口在PowerShell中

我的代码: $ie = new-object -com "InternetExplorer.Application" $ie.navigate("http://localhost") $ie.visible = $true $ie.fullscreen = $true 但是,全屏后,窗口仍然出现在 Windows任务栏后面 。 当我点击窗口使其焦点时,任务栏落后,并显示我想要如何。 我怎样才能做到这一点编程? 谢谢!

SET-ACL文件夹权限没有正确应用我的PowerShell脚本

我有两个脚本:第一个创build一个新的根文件夹,第二个创build一个新的子文件夹。 它大部分工作正常,但是当inheritance的权限被下拉到子文件夹时,权限不会显示在“安全”选项卡上。 但是,如果我检查高级权限显示正确… 这似乎是导致问题,因为inheritance的权限似乎没有正确应用到文件夹。 我究竟做错了什么? 用图像来澄清: 这是我的两个脚本: 根/父文件夹创build: # Create initial ACE # Create the initial Object # Set domain – This could also be changed to prompt for domain if we decide it is needed # Define local Administrators group by Well Known SID # Set additional ACEs for the new AD File Share […]