Articles of PowerShell的

将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议!

Powershell:返回最高编号的文件名

假设我有一个像这样的文件名列表: Get-ChildItem "Antarctica Data *.xls" Antarctica Data 03625516.xls Antarctica Data 84327262.xls Antarctica Data 16374175.xls Antarctica Data 12804427.xls Antarctica Data 17477809.xls Antarctica Data 60943758.xls Antarctica Data 93962083.xls Antarctica Data 74412097.xls Antarctica Data 81562648.xls Antarctica Data 58371936.xls 我怎样才能使用Powershell返回一个string的最高数字的文件名? Antarctica Data 93962083.xls

WMIMethodException与.InstallProductKey

首先,这是我的第一篇文章,所以如果我错误地发布在错误的位置,请让我知道。 所以,我们要完成的是构build一个powershell脚本,我们可以把它放在我们的工作站映像上,这样一旦我们的Windows 10盒子完成映像,我们就可以点击一个powershell脚本,让它从BIOS中取出密钥,并自动激活它。 这就是说,这里是我们从各种来源汇集的脚本。 (Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey | out-file c:\license.txt $computer = gc env:computername $key = get-content c:\license.txt $service = get-wmiObject -query “select * from SoftwareLicensingService” -computername $computer $service.InstallProductKey($key) <——–THIS IS WHERE IT FAILS $service.RefreshLicenseStatus() 我们开始碰到行$service.InstallProductKey($key) 。 看来,无论我们如何尝试调用它,它将一贯地失败,错误“exception调用”InstallProductKey“”。 我甚$key用特定的激活码replace了variables( $key ),它仍然失败,出现相同的错误。 我们将它输出到许可证txt文件中的原因是,我们可以validation命令是否确实拉取了产品密钥(它是什么)。 在这一点上,我不知道该去哪里。 看来以前人们都试图做到这一点,但是,没有人真正把自己的发帖和有用的和/或没有发表的东西结合起来。 我无法想象这是不可能的,但是我也不喜欢浪费时间,所以任何对这个问题有深入了解的人,我都会很感激。 我们已经在两台以前被激活的机器上工作,后来停用了,但是新机器已经成像并且还没有被激活,每次都会失败。

如何在批处理脚本运行时获取当前的活动窗口?

我有一个批处理脚本,我想用热键来运行,这个脚本应该在活动窗口中做一些动作(例如,创build一组特定的文件夹,或小写文件夹内所有文件的名称)。 所以脚本需要在被调用时引用活动窗口。 我试图离开别名的“开始”字段为空,但回显%cd%总是打印“C:\ Windows \ System32”而不是当前的活动窗口。

错误MSB3147:找不到所需的文件“setup.bin”发布到本地失败

在网上冲浪和讨论这个问题之后 ,我终于问了一个关于旧错误的新问题。 我在Windows 10上使用Visual Studio Enterprise 2015。 这个问题和答案是从2011年MSBuild:错误MSB3147:无法find所需的文件“setup.bin” 。 这个问题和接受的答案是在2012年写的,其他答案是从2015年,有一个从2016年,这是没有帮助无法find所需的文件“setup.bin” 。 该项目的目标版本是4.0。 我正在运行一个只能从另一台本地机器运行的psl脚本。 我不断收到这个错误: C:\ Program Files \(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(4769,5):错误MSB3147:找不到需要的文件'setup.bin' SRC \ XXX \引擎”。 [C:\ dev \ xxx \ src \ xxx \ xxx.csproj]发布到本地失败 我已经尝试了每个答案的每个解决scheme。 唯一的作品是从这个答案 <BootstrapperEnabled>false</BootstrapperEnabled> 如果需要设置为true,那么这是一个问题。 我也在MSDN上跟着这个答案 。 这个博客 。 我添加了registry项: 我也注意到Windows 10内置了.NET框架,而且它错过了4.0。 我已经卸载了dotNetFx40_Full_setup.exe,并在Visual Studio上运行了修复程序,以便根据需要安装sdks。 这没有帮助。 我有一个MSBuild的exe文件应该是这样的 : […]

将今天创build的所有文件从networking位置移动到本地驱动器

使用我下面给出的脚本,我只是想剪切粘贴从源到目标的所有.dat文件,其中源是一个networkingpath。 @echo off set datetime=%date:~0,2%-%date:~3,2%-%date:~6,4%_%time:~0,2%-%time:~3,2% mkdir "D:\data\Backup\%datetime%" net use L: \\10.xx.xx.xxx\shared\files /persistent:no set source=L: \\10.xx.xx.xxx\shared\files forfiles /P "%source%" /M *.dat /D +0 /C "cmd /c move @path D:\data\Backup\%datetime%" net use L: /delete /y 但是..抛出ERROR: The directory name is invalid. 我不明白为什么FORFILES不接受我的networkingpath作为来源。 请有人帮我出来吗? 我也没有使用PowerShell的问题。

使用Powershell更新Active Directory中的Active Directory用户属性

在使用Powershell v2.0的Windows Server 2003 R2环境中,如何复制Set-QADUser的function以更新Active Directory中的用户属性(如电话号码和标题)? 这里的技巧是,我想这样做,而不依赖于Set-QADUser,我没有select使用Server 2008的commandlets。 谢谢。