问题标签 [powershell-4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11299 浏览

powershell - Powershell 命令在 Powershell 中有效,但在脚本中无效,为什么?

我想将我的 IIS Bidings 输出到 csv 或 txt ,我只是在使用该 cmdlet 玩了一下:

效果很好,使用此命令也可以完美地输出到 .txt :

但是,一旦我将它包装到一个函数中,powershell 就会尝试找到当然不存在的物理路径 IIS:\Sites。

到目前为止,我的脚本非常简单:

我错过了什么?我想把它排除在外,因为我想把它放到一个更大的脚本中,从 xx 网络服务器中排除我的网络绑定。

我认为这与控制台中已经给出但不在我的脚本中的环境变量有关。但我不知道如何管理它们。已经尝试过get-childitem evn: ,这给我带来了很多变数。

0 投票
1 回答
4684 浏览

powershell - 使用 powershell 远程处理、调用命令和模块 webadministration 从许多 web 服务器获取 IIS 绑定

现在我制作了一个小脚本来查看我在服务器上的实际网络绑定。

这将使我的 IIS 绑定到 txt 文件,效果很好。我现在需要将该命令调用到其他几台服务器并将输出文件保存在一台服务器上。由于机器名称会有所不同,我希望输出与服务器一样多。

我尝试了以下示例:

但是导入的模块 webadministration 不起作用,因为我只在一台服务器上加载。所以我尝试使用远程加载:

没有成功。

如何做到这一点?

0 投票
2 回答
121 浏览

powershell - “过期”的 PowerShell 动词

我正在最终确定服务器应用程序的 cmdlet 集。应用程序的一部分包括安全主体管理和数据对象管理,以及两者的“到期”(定时和手动)。在到期日期之后,安全主体的登录和访问将被拒绝,并且可以选择阻止对该主体拥有的数据的访问(通过立即删除或通过将其标记为过期作为自动维护的一部分)。

从 Get-Verb 的输出中,我看不到 Expire 的明显同义词,它是此处进行的操作的最自然的动词选择。安全主体上的到期使主体到期,也可能使他们存储的所有数据到期,而数据对象的到期仅限于该对象。

Set- 已用于两种对象类型,并且在功能上有部分重叠(使过去的日期过期,并删除数据,而 Set- 将允许未来或过去的日期,但不会删除数据)。

以这种方式,Expire 结合了两个操作(设置+删除),出于数据安全的原因,我们不希望强制分离为两个操作(这已经是可能的)。

出于这个原因,我也认为 Disable- 不合适,因为它暗示了 Enable- 反转的可能性。

我也认为 Remove- 本身是不合适的,因为有些数据记录特别没有作为操作的一部分被删除。

至少对于数据而言,Unpublish 似乎非常接近,但似乎意图是 Unpublish 和 Publish 配对,在这种情况下它是不可逆的。当应用于安全主体时,它也没有意义。

那么,如果您想使某些东西过期,您希望使用哪个(如果有的话)标准动词?

0 投票
2 回答
547 浏览

html - 解析 DNS,导出到 Excel 和 HTML,然后发送邮件

我几乎完成了我的剧本,并在深夜进行了一些编辑并重写了我的旧版本,所以我不能回去了。

脚本运行良好,仍然需要一些调整,但现在它已经完全停止了。

这个想法是 GC 一个 IP 列表。解析 IP 并将它们放在 Excel 表中。然后将工作表保存到 htm 和 xlsx。最后把这些邮寄给我。

现在它卡在整理表格,保存和邮寄......有人能给我一些关于我在这里做错了什么的见解吗?

它卡在整理表格、保存和邮寄上。

它不再对 B3:B$Count 进行排序:

使用“1”参数调用“排序”的异常:“排序引用无效。确保它在您要排序的数据内,并且第一个排序依据框不相同或空白。”
在 C:\Folder\Scripts\Get-IP.ps1:137 char:5
+ [void] $objRange.Sort($objRange2)
+ ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

它不再保存 xlsx 文件,而是保存 HTM 文件。它显然没有覆盖某些东西。我什至重新启动以确保。

使用“1”参数调用“SaveAs”时出现异常:“Microsoft Excel 无法访问文件‘C://Folder/BlockedIP/HTML/2014-07-08/0BCEF810’。工作簿。”
在 C:\Folder\Scripts\Get-IP.ps1:160 char:5
+ $b.SaveAs("$FileXML")
+ ~~~~~~~~~~~~~~~~~~~~~ ~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

最后,它不再向我发送电子邮件:

新对象:使用“2”参数调用“.ctor”的异常:“指定的字符串不是电子邮件地址所需的格式。”
在 C:\Folder\Scripts\Get-IP.ps1:217 char:13
+ $SMTP = New-Object System.Net.Mail.MailMessage($SMTP, 587)
+ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New- Object],MethodInvocationException
+ FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

剧本:

任何帮助将不胜感激!

0 投票
1 回答
720 浏览

arrays - 如何使此 PowerShell 函数返回纯字符串,但不返回字符串数组?

即使该$logDir变量包含值"C:\Users\DEVELO~1\AppData\Local\Temp\logs"(从文本文件中获得),该代码的行为也不符合我的预期。它返回一个字符串数组,而不是单个字符串。

我可能遗漏了一些非常基本的东西,因为我希望该函数返回 1 个字符串,而不是字符串数组并记录一两行。

但是,它不记录,并且:如果$Local:logDir存在,该函数返回一个由 2 个字符串组成的数组,否则它返回一个由 4 个字符串组成的数组。

  • 为什么?
  • 我怎样才能让它返回 1 个字符串并仍然记录?

我认为这与使用流水线隐喻的思考与我在过程和面向对象的编程语言方面的背景有关。非常感谢您的帮助(:

2 字符串数组:

4 字符串数组:

笔记:

  • 我在PowerGUI中运行,但在 PowerShell 控制台中它具有相同的结果。
  • $PSVersionTable.PSVersion返回4.0
0 投票
0 回答
328 浏览

powershell - 在连接中使用来自 web.config 的字符串变量时的 PowerShell 问题

我有一个字符串($dataBaseName 变量)的问题,我通过一个函数从 web.config 文件中提取。

当我写主机时它显示值,当我使用 GetType() 时它显示它是一个 System.String,但在与另一个变量连接时它不会提取值。最终,我想将它用作从我正在编写的模块中调用的参数。

这是我用来获取遇到问题的 $dataBaseName 变量的代码。

后来我尝试通过将它与计算机变量组合来引用它,使用许多不同的方法来连接它(with ()、string.format 等),但它只会显示 $instance 的值的“ComputerName\”多变的。

如果我对数据库名称进行硬编码,它可以正常工作。

我将这些信息用于 SQL 查询,如下所示。稍后我实际上将使用安全字符串作为密码,但这仅供参考。

Web.config 摘录:

0 投票
4 回答
37771 浏览

regex - Powershell - 正则表达式多重匹配

也许我的推理有问题,但我无法让它发挥作用。

这是我的正则表达式:(Device\s#\d(\n.*)*?(?=\n\s*Device\s#|\Z))

试试看:http ://regex101.com/r/jQ6uC8/6

$getdevice是输入字符串。我从命令行工具的流/输出中获取此字符串。

输出:

设备#0 设备#1 设备#2 设备#3 设备#4

$matches[1] 的相同输出,$matches[2] 为空。

有没有办法让我获得所有匹配项,比如在 regex101.com 上?我正在尝试将输出/字符串拆分为单独的变量(一个用于 Device0,一个用于 Device1、Device2,等等)。

更新:这是命令行工具的输出:http: //pastebin.com/BaywGtFE

0 投票
2 回答
10617 浏览

windows - How to stop a long running cmdlet in PowerShell

Let's say I run this cmdelt :

This cmdlet takes forever showing events and never stops, is there a certain command or something I can type to stop it and return to my C:\> ?

0 投票
2 回答
5609 浏览

powershell - Powershell Remoting:Enable-WSManCredSSP 失败并显示:无法执行此命令,因为无法启用该设置

我尝试了以下命令来启用 CredSSP:

Enable-WSManCredSSP :无法执行此命令,因为无法启用该设置。

我该如何克服这个错误?我究竟做错了什么?这个错误的原因是什么?

获取 WSManCredSSP

计算机未配置为允许委派新凭据。此计算机配置为从远程客户端计算机接收凭据。

winrm 获取 winrm/配置

0 投票
1 回答
1623 浏览

windows - PowerShell:(ConvertTo-* | Set-Content)和(Export-*)之间的区别?

我是 PowerShell 的新手,并尝试以编写方式学习东西,我注意到在这种情况下我可以以多种不同的方式导出数据,我想问的是这种情况,

和 :

两者都将进程列表导出到我桌面上的 CSV 文件中,并给出相同的结果。

第一个 :

首先将进程转换为 CSV,然后将其写入文件。

第二个 :

将进程直接导出到文件。

这两种情况的真正区别是什么,是否存在性能差异、时间执行差异或其他我不知道的东西?