Articles of PowerShell的

Powershell Get-Content + Invoke-Expression单独执行语句,还是一次执行所有语句?

考虑这个说法: Get-Content .\zipper.ps1 | Invoke-Expression 以下是Technet中logging的一个变体。 Invoke-Expression (Get-Content '.\zipper.ps1' -Raw) 这两个陈述工作得很好,虽然第二个执行得更快。 假设zipper.ps1是一个包含多行可执行Powershell代码的脚本。 上述语句是否将zipper.ps1中的每一行作为单独的命令执行? 或者,将整个脚本作为一个大的连接string来执行? 我的问题涉及到powershell语句的字符限制 – 如果每个代码行都在powershell字符限制内,但是整个脚本超过了字符限制,上述命令是否会超出字符限制? PowerShell可能有260个字符的限制(不确定)。 这些页面在Powershell中提到了字符限制: https://support.microsoft.com/en-us/kb/830473 https://social.technet.microsoft.com/Forums/windowsserver/en-US/f895d766-5ffb-483f-97bc-19ac446da9f8/powershell-command-size-limit?forum=winserverpowershell 细节: Technet指出: “ Get-Content cmdlet获取path指定位置的项目内容,例如文件中的文本。 和 “ Invoke-Expression cmdlet将评估或运行指定的string作为命令,并返回expression式或命令的结果。 到目前为止这么好 – 这非常清楚地解释了我的声明是如何以及为什么如此。 但它不会告诉我这些语句是作为单独的语句执行还是作为一个大的连接string来执行的。 第二个变化跑得快的事实可能是一个线索。 也许我需要添加一个For..Each 。 technet文档说Get-Content返回一个集合,而这个Technet文章说它返回一个数组。 这是冲突的信息,但不知道arraysVS收集事项我的问题在这里。 谢谢

是否有可能编写一个在bash / shell和PowerShell中运行的脚本?

我需要创build一个集成脚本来设置一些环境variables,使用wget下载文件并运行它。 面临的挑战是它需要能够在Windows PowerShell和bash / shell上运行的SAME脚本。 这是shell脚本: #!/bin/bash # download a script wget http://www.example.org/my.script -O my.script # set a couple of environment variables export script_source=http://www.example.org export some_value=floob # now execute the downloaded script bash ./my.script 这在PowerShell中是一样的: wget http://www.example.org/my.script -O my.script.ps1 $env:script_source="http://www.example.org" $env:some_value="floob" PowerShell -File ./my.script.ps1 所以我想知道这两个脚本是否可以在任一平台上合并并运行成功? 我一直在试图find一种方法,把他们在同一个脚本,并得到bash和PowerShell.exe忽略错误,但没有成功这样做。 任何猜测?

Ansible无法通过SSH连接到Windows节点

我试图通过Ansibleconfiguration一个运行OpenSSH的Windows节点( https://github.com/PowerShell/Win32-OpenSSH )。 虽然正常的SSH连接工作,Ansible似乎无法连接到节点。 正常的SSH连接: sysadmin@MY_LINUX_SERVER:~/ansible$ ssh administrator@MY_WINDOWS_HOST -vvvv OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to MY_WINDOWS_HOST [ABCD] port 22. debug1: Connection established. debug1: identity file /home/sysadmin/.ssh/id_rsa type -1 debug1: identity file /home/sysadmin/.ssh/id_rsa-cert type -1 debug1: […]

在循环之前sorting目录 – PowerShell

我需要按照从最早的创builddate到最新的顺序处理文件 这是正确的还是有更好的方法来做到这一点? 谢谢 Get-ChildItem -Path C:\Users\Tom\ -Filter "*.journal" | Sort-Object -Property CreationTime ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d{1,12}-\d{1,12}\].journal" })) { #### Process files in order from oldest to newest $file = $source+$sourcefile }

允许通过共享文件夹上的应用程序查看CHM文件

我们的用户希望通过点击帮助图标(应用程序菜单中的问号)来查看CHM帮助文档。 应用程序是MiniTab。 MiniTab应用程序通常是每个工作站安装的,但我们希望通过networking共享来运行应用程序。 当我们尝试通过应用程序查看帮助时,我得到一个标准的Windows帮助对话框,但内容是空白的。 使用KB 892675实现所有过多的registry信息https://support.microsoft.com/zh-cn/kb/892675如果我设置了registry,我成功地双击查看UNC文件共享上的CHM文件键ItssRestrictions和值MaxAllowedZone为2。 良好的PowerShell代码来查看共享文件夹上的CHM文件: $registryPath = "HKLM:\SOFTWARE\Microsoft\HTMLHelp\1.x" $name = "ItssRestrictions" # New Reg Key New-Item -Path $registryPath -Name $name $registryPath = "HKLM:\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions" $name = "MaxAllowedZone" $value = 2 Set-ItemProperty -LiteralPath $registryPath -Name $name -Value $value -Force # Verify your changes Get-ChildItem "HKLM:\SOFTWARE\Microsoft\HTMLHelp\1.x" 此外,下面的MS KB,我试图允许嵌套协议和白名单CHM UNC,'file://'前缀和映射的驱动器格式。 没有任何工作 在尝试通过应用程序查看帮助文件后,事件查看器有一条消息:“来自源ITSS的事件ID 1的描述找不到。引发此事件的组件未在您的本地计算机上安装或安装已损坏您可以在本地计算机上安装或修复组件。 如果事件发生在另一台计算机上,显示信息必须与事件一起保存。 活动中包含以下信息: \ UNCPathToTheCHMFolder […]

在64位Windows上运行cURL

我是cURL的新手,只是安装了它,但似乎只做它的感觉。 我使用的是我从这里得到的64位版本: http : //curl.haxx.se/latest.cgi?curl=win64-ssl-sspi安装说明,我在这里find: http : //guides.instructure.com / m / 4214 / l / 83393-how-do-i-install-and-use-curl-on-a-windows-machine 。 打开一个新的Powershell窗口我可以使用一个简单的GET请求,如下所示: curl http://localhost:3000 但如果我运行一个POST curl -d "hello world" http://localhost:3000 它告诉我“Invoke-WebRequest:Parameter无法处理,因为参数名称'd'不明确,可能的匹配包括:-DisableKeepAlive -Debug。 试图获得帮助,我键入 curl -h or curl –help 给我“Invoke-WebRequest:缺less参数”Headers“的参数。指定一个types为”System.Collections.IDictionary“的参数,然后重试。 正如我所说,我是一个curl新手,但似乎很奇怪,它可以做请求,但没有别的。 任何想法我做错了什么? Windows 7 64位Powershell版本4

Powershell使用ScheduledJob在启动时使用pipe理权限运行作业

为了减轻我的一些工作,我创build了一个PowerShell脚本,它需要: 在启动时运行。 使用pipe理员权限运行,因为它必须写在c:\ program files文件夹中。 我使用PowerShell创build启动服务,如下所示: function MakeStartupService { Write-Host "Adding script as a startup service" $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:15 Try { Register-ScheduledJob -Trigger $trigger -FilePath "absolute_path" -Name "Job-name" -EA Stop } Catch [system.exception] { Write-Host "Looks like an existing startup service exists for the same. Overwriting existing job" Unregister-ScheduledJob "Job-name" Register-ScheduledJob -Trigger […]

使用PowerShell每x秒运行一个batch file

我想使用一个Windows PowerShell脚本运行一个batch file每隔x秒钟。 所以这是同一batch file一遍又一遍的运行。 我做了一些看,但找不到我在找什么。 这是我想要在Windows XP机器上运行的东西。 我曾经使用Windows调度器很多次类似的,但由于某种原因Windows调度程序只运行一次…然后没有更多。 我也不想让batch file自己调用,因为在运行这么多次之后会出错。

确定窗口是否正在播放声音

所以我一直在思考这个问题一段时间,我不知道什么是正确的方式去做这件事。 我想确定Windows是否在某个时间使用Powershell脚本输出声音。 我可以确定audio驱动程序是否有错误,但我不能确定系统是否在播放声音。 我看了一下System.Media的.NET类,里面的三个类都和播放声音或操作系统声音有关。 我不是要求为我写的代码,我只需要知道从哪里开始检查Windows系统是否正在播放声音。 我有一个声音监视器,它不断监视Node.js平台上的声音,当它失去声音时,它会发送给我一个文本。 那么,我也希望它能够通过它所连接的所有系统,看看故障在哪里。 这就是为什么我想看看Windows电脑是否在播放声音。

如何从PowerShell 1.0调用DLL方法

我正在使用PowerShell V1.0脚本从DLL文件中调用方法,并使用以下代码将DLL文件加载到PowerShell中。 [System.Reflection.Assembly]::LoadFile("path of dll") is loaded successfully GAC Version Location — ——- ——– False v2.0.50727 location of dll 该类包含一个公共的默认构造函数。 我试着用下面的代码创build一个类的对象: $obj = new-object namespce.classname 它会抛出以下错误: New-Object:使用“0”参数调用“.ctor”的exception:“namespce.classname的types初始值设定项引发exception。 在线:1 char:18 + $ obj = new-object <<<< namespce.classname + CategoryInfo:InvalidOperation:(:) [New-Object],MethodInvocationException + FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand` 当我试图在不创build对象的情况下调用类的方法时,即使类包含方法,也会抛出下面的错误: PS C:\Windows\system32> [namespace.classname]::method() Method invocation failed because [namespace.classname] doesn't contain a method named […]