问题标签 [powershell-5.1]

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 回答
37 浏览

powershell - Posh-SSH 在 WorkFlow 中出现错误

我编写了一个脚本来从 SQL DB 中导出行,使用 PGP 对其进行加密,然后使用 POSH-SSH v2.3.0 传输它们。一切正常,直到我将其放入 PowerShell 工作流中以一次运行多个。

这个特定的行是问题:

运行该行时,我收到以下错误。如果我注释掉该行,错误就会消失并且脚本运行良好(减去实际传输文件)。

对我来说,POSH-SSH 似乎有些东西与 PowerShell 工作流不兼容。有没有人有这方面的经验?我会尝试升级到 v3.0 PSH-SSH,但它位于运行大量自动化的相当锁定的服务器上,并且需要我安装新的 .NET,这可能会破坏很多东西。

编辑:作为测试,我在笔记本电脑上安装了 POSH-SSH v 2.3.0,得到了同样的错误。然后我将 POSH-SSH 更新到版本 3.0.0(最新),我仍然得到同样的错误。

感谢任何帮助!我已经被这个卡住了很长一段时间了。

0 投票
2 回答
112 浏览

windows-10 - 当我将参数传递给嵌套的 Start-Process 命令时,PowerShell 删除了多个连续的空格

此 powershell 代码工作正常:

但是当我输入完整的命令时,powershell 在单词之间只留下一个空格,但在我的路径中有两个连续的空格:

与此相同的错误:

这是错误消息:

在此处输入图像描述

如您所见,在错误消息中,路径仅包含单词之间的一个空格,而在代码中我正确输入了两个连续的空格。

这是输入凭据的代码(就在给出错误的行之前):

几天来,我一直在让一行代码正常工作,但没有成功。
我输入的那些示例路径实际上是变量(具有不定数量的连续空格),因此通过将 -ArgumentList 括在单引号中,变量不会被扩展。
你可以采用你认为最适合帮助我的策略。
Windows 10 Pro 64 位
Powershell 版本:5.1.19041.1237(集成在 Windows 10 中)。

更新:

@mklement0 存在的问题是,实际上有问题的行包含一个可扩展变量:

因此,如果路径包含单引号,则该行出错。

更新 2:

@mklement0您的解决方案已停止工作,因为我将它放入我需要的脚本中,并带有以下错误消息:

在此处输入图像描述

0 投票
1 回答
97 浏览

powershell - 如何动态地将 PSCustomObjects 添加到列表中

我正在创建一个脚本来解析 CSV 文件,其中我将 CSV 中每个索引字段的内容存储为 PSCustomObject 中的 NoteProperty。

当我逐行解析文件时,我将 PSCustomObject 添加到列表类型。当我输出我的列表时,我希望能够执行以下操作:

并且可以很好地查看 csv 文件中的每一行,并分成标题向上的列。

问题

当我将 PSCustomObject 添加到列表时,它会将列表的类型更改为 PSCustomObject。在实践中,这具有将对该 PSCustomObject 所做的任何更新追溯应用到列表中的每个元素的明显效果。

这是一个示例:

预期输出:

实际输出:

问题

有没有办法获得预期的输出?

限制/附加上下文(如果有帮助)

我正在尝试优化性能,因为我可能会解析非常大的 CSV 文件。这就是为什么我被一个列表困住了。我了解列表中的 Add 方法比使用 += 为每一行重新创建数组更快。我还使用运行空间池分别解析每个字段并通过更新对象$list.$field[$lineNumber] = <field value>,所以这就是为什么我需要一种动态更新 PSCustomObject 的方法。我的代码的更大视图是:

PS 版 (5.1.19041)

0 投票
1 回答
193 浏览

windows-10 - The PowerShell code works when run from the PowerShell command prompt but not when run with double-click or turned into an executable

This code:

works when I run it line by line from the PowerShell command prompt.
The problem occurs both when I associate the .ps1 extension to "Windows PowerShell" and then double-click on the script, and when I compile the script in .exe through IronMan Software's "PSScriptPad".
A similar problem is present at the following link:
Powershell script executes correctly when I choose "run with powershell", but not when I "open with" powershell or double-click it
but in my case it doesn't even work with "Run with PowerShell" and perhaps the cause of the problem is the same one that also affects executables.

Another useful link is the following:
https://stackoverflow.com/a/58245206/45375

How can I solve the problem?
Windows 10 Pro 64-bit
Powershell Version: 5.1.19041.1237 (Integrated in Windows 10).

0 投票
0 回答
36 浏览

powershell - 脚本只加载一次哈希表

下面的函数应该将传递的参数和值添加到哈希表中,以便稍后在设置实际属性时使用。. . 由于我无法理解的原因,哈希表只显示一次,只有一组属性。

我试图让它为每个用户传递所有的值,但它只为一个用户做。

使用命令行参数:Change-DRAUserProperty -UserName Abe, Abe2, Abe3 -Company SSC -Department USSF

. . .only 显示:

而不是每个用户传递一个(结果应该是什么):

不太确定我可能做错了什么,我可以让其他人看看并指出我的错误吗?

我要疯了伙计们?

0 投票
1 回答
114 浏览

powershell - 使用 PowerShell 在所有服务器上编写所有 SQL 链接服务器的脚本

我需要将环境中所有链接服务器的脚本导出到每个服务器的文件中。

下面的命令成功地脚本出 ServerName1 上的所有链接服务器

问题是我有 35 台服务器,为了让这个命令正常工作,我需要更改每台服务器的目录。

换句话说,需要为每个服务器按如下方式运行命令

如何根据服务器名称循环从不同路径运行的命令并将文件命名为与服务器名称相同?

0 投票
1 回答
94 浏览

windows-10 - cmd.exe --> powershell.exe "-File" 和 "-Command" 在同一行

test.ps1 包含:

我在命令提示符 (cmd.exe) 中有一行需要调用 powershell.exe,同时传递“-File”选项和“-Command”选项。
使用这种错误的语法:

“-Command”和“echo test”作为参数传递给“test.ps1”脚本文件。实际上输出是:

我期望作为输出:

另一方面,如果我反转“-Command”和“-File”选项:

“-File”和“test.ps1”是“-Command”选项参数的简单延续。实际上输出是:

我期望作为输出:

“-Command”选项的帮助:
“如果Command的值是一个字符串,它必须是命令中的最后一个参数,在命令之后键入的任何字符都被解释为命令参数。 ”。
这是一个非常错误的声明,因此应该向 Microsoft 报告一个错误。

问题:

也就是说,编写命令的正确方法是什么?

回答要求:

作为解决方案,我想要一种不使用“-Command”选项参数调用文件的方法;所以,即使它有效,我也不想要这样的东西:

此命令最终需要用作注册表项(经典子项“Shell\Open\Command”)中的值。

例如目录[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command]

这有效:

这不是:

因为在命令之后键入的任何字符都被解释为命令参数。

Windows 10 Pro 64 位
Powershell 版本:5.1.19041.1237(集成在 Windows 10 中)。

0 投票
1 回答
59 浏览

powershell - 从数字列表构建表达式

我有一个数字(交换机端口)的变量列表,我需要将其构建到一个字符串中,该字符串指示哪些端口应该“包含”,哪些应该“排除”。以下是所需格式的示例:

在此示例中,如果我的号码是 1-19 和 40-45,则将包括端口 1、端口 3 和端口 44,而将排除端口 10-12、14-19、40-43 和 45。

我事先不知道端口列表中会出现什么数字。我该如何构建这个表达式?

0 投票
1 回答
33 浏览

powershell - 我可以向标准 PowerShell 类型添加静态重载吗?

我正在尝试为我的最新脚本配置运行空间池。我想将一些函数传递给这个运行空间池。我从这个链接中找到了一种潜在的方法:

在此之后,我$initialSessionSate为 CreateRunspacePool 方法准备了一个。

问题是我被迫添加 $Host,因为 CreateRunspacePool 方法对包含以下内容的构造函数没有重载( <min runspaces>, <max runspaces>, <initial session state> )

但是,当我包含 $Host(通过 Get-Host)时,运行空间以非语言模式启动,这是我不想要的。一方面,根据微软文档,我相信无语言模式会阻止在我的运行空间上使用 AddScript,但目前它给了我以下语法错误:

在此处输入图像描述

如果我回到最小/最大运行空间重载并在脚本块中定义我的所有函数,此错误就会消失。

根据 Google 的说法,当我实例化运行空间以覆盖此行为时,似乎无法显式设置语言模式,因此我的目标是避免提供 $Host.

问题

有谁知道我是否以及如何将自己的构造函数添加到不包含 $Host 的 CreateRunspacePool 方法中?或者也许是其他方式来实现我的目标?

如果它是相关的,我的 PowerShell 在 FullLanguage 模式下运行:

PS(5.1.19041)

Edit1:添加了无语言模式的错误图片和更多上下文。

0 投票
1 回答
39 浏览

powershell - 尝试在列表上使用 Import-Clixml 时,返回值为 System.Object

这是一个简化且完整的代码示例:

这是我收到的异常:

在过去的 4 个小时里,我一直在尝试不同的排列:

  • 添加[Serializable()]到第一堂课
  • ConvertTo-XmlList<>保存之前和从文件读取之后使用
  • 打破加载步骤以首先转储到一个新列表中 - 它确实从文件中加载数据,但我不能将它放回单例的 List<> 因为它加载为System.Object
  • 尝试使用保存到 json(如下)和相同的错误消息
    • $this.Dedis | ConvertTo-Json | Set-Content "D:\test.json"
    • $this.Dedis = Get-Content -Raw "D:\test.json" | ConvertFrom-Json
  • 还有很多其他的尝试,我已经记不起来了。

我想要的只是一种将文件保存List<>到文件然后在我的下一个脚本运行时再次加载它的方法。该示例非常简化;它保存,清除,然后尝试再次加载以显示我正在处理的内容。我读到的所有地方都是 Import-Clixml 应该将 XML 文件作为原始对象加载回,但我没有任何运气。