问题标签 [powershell-3.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.
powershell - 在自定义模块中使用时,Import-Pssession 不导入 cmdlet
我有一个 PowerShell 脚本/函数,当我在我的 PowerShell 配置文件中使用它或在 PowerShell 窗口中手动复制/粘贴该函数时效果很好。
我正在尝试使我团队的其他成员可以作为一个模块访问该功能。我希望将模块存储在一个中心位置,以便我们都可以将它添加到我们的 PSModulePath。
这是基本功能的副本:
如果我将此函数保存在我的 PowerShell 配置文件中,它可以正常工作。我可以在其中包含此函数的 *.ps1 脚本,它也可以工作。
问题是当我将函数另存为 *.psm1 PowerShell 脚本模块时。该函数运行良好,但 Import-PSSession 中导出的命令均不可用。我认为这可能与模块范围有关。
我正在寻找有关如何解决此问题的建议。
编辑
当我创建以下模块并运行 Connect-O365 时,导入的 cmdlet 将不可用。
当我导入没有 Connect-O365 功能的下一个模块时,导入的 cmdlet 可用。
这似乎是某种范围的问题,只是不知道如何解决它。
powershell - powershell - 格式化安装日期
嗨,我想比较不同的驱动器。如何格式化 InstallDate?
Powershell中只有空间
powershell - 来自powershell函数内部的外部命令的流输出
考虑以下命令:
我有以下两个精简的 powershell 脚本
文件 1:common.ps1
文件 2:脚本.ps1
通过@Christian 和@zdan 的输入,我能够将问题与返回值的捕获隔离开来。与 类似archive-folder
,我还有其他执行某些命令行工具的功能。我在想这些函数中的每一个都可以返回真或假,这取决于是否使用正确的操作调用了该函数以及是否正确执行了命令行工具。
但是,如果我捕获archive-folder
函数的返回值,则命令的输出不会打印到控制台。此外,我的返回值不包含真值或假值。它由命令的整个输出组成。
我第一次尝试解决这个问题是将命令执行语句写为iex $archive_command | write-verbose
,但这并没有流输出。
我想我可以检查命令行工具在成功的情况下的副作用(比如存档文件的存在)以确定我的函数是否成功执行,但不确定我是否能够对我可能的所有函数执行此操作最终创造。
有没有办法返回一个值并流式传输命令行工具的输出?
编辑 2
关于我为什么要把代码分成两个单独的文件/函数,我的实际使用场景如下
将
script.ps1
协调此流程。备份数据库(mongodb 为 db 的每个集合生成文件)。归档数据库备份。将存档上传到 S3。这些步骤中的每一个都将由common.ps1
. 将script.ps1
只包含胶水代码。发布所有这些可能会使问题复杂化,我觉得不需要了解所面临的问题
编辑 1
如果被压缩的文件夹有5个文件,7zip会先输出版权。然后它将输出文本Scanning
。然后它会输出一行Creating archive at some location
。然后它将处理每个文件,一个一个地输出每个文件的进度。通过这种方式,我们可以获得有关操作进度的持续反馈。
如果我执行 powershell 函数,那么我在操作期间看不到任何输出,然后一次看到所有输出。我没有收到来自 7zip 的任何反馈。我想模拟 7zip 作为独立 exe 运行时显示的行为。
powershell - 如何让 PowerShell 执行 MpCmdRun.exe
PowerShell 像 cmd 一样运行 IpConfig 和 WhoAmI 等程序。但是,我很难运行 MpCmdRun.exe
清除主机
集位置“C:\Program Files\Windows Defender”
Get-ChildItem
mpcmdrun.exe
结果
错误:
mpcmdrun.exe:术语“mpcmdrun.exe”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。
powershell - Powershell 中的数组
我曾经在 VBSCRIPT 中使用数组,如下所示……我不确定我应该如何在 PowerShell 中进行操作……有谁能帮我……?
powershell - 使用 -Properties 时,将 Get-ADObject 结果保存到变量会变慢
我正在尝试运行以下 cmdlet 并将其输出保存到我的 $query 变量中。
LDAP 查询运行得非常好(在 6000+ LDAP 数据库上大约需要 10 秒)。返回的结果集包含大约 150 个用户对象。尝试像这样迭代 $query 变量时会发生奇怪的事情:
或者:
迭代速度非常慢(每个对象大约 10-30 秒)
当查询未保存到变量时,一切正常且快速,例如运行命令:
此外,当使用像这样的格式化 cmdlet 时:
但是,我需要“对象”进行迭代。所以保存文本输出在这里对我没有帮助。更令人困惑的是,当仅通过调用“$query”迭代一次时,对曾经打印的对象的以下调用在所有进一步的调用中都会被快速处理。
此外,当 '-Properties' 参数从 'Get-ADObject' cmdlet 中排除时,保存到 $query 变量的结果也会得到快速处理!“-Properties”参数似乎导致它变慢,(所以我想它与内存限制无关,考虑到我有足够的可用内存)。
有谁知道:
为什么会发生这种情况?
为什么它只在使用-properties 时发生?
如何解决问题/一些解决方法(我不能使用“DirectorySearcher”类,因为无法指定用户为该类运行“LDAP”查询,并且不能调用“runas”)。
powershell - 合并两个相似的 PSObject
执行 Get-ADObject 查询后,我得到了两个 PSObject(用于 2 个单独的 OU),我们称它们为 $query1 和 $query2,它们包含类型的成员对象
现在我想将这两个 PSObject($query1 和 $query2)合并到一个包含两个查询的 ADObject 的 PSObject 中,但我真的不知道该怎么做。
powershell - 如何将 Export-CSV 链接到 Send-MailMessage 而无需在 PowerShell 中将 CSV 保存到磁盘?
我想以 CSV 格式通过电子邮件发送 AD 用户列表,但我不想在通过电子邮件发送之前将 CSV 保存到磁盘。
这是获取数据的代码:
现在我想添加如下内容:
无论如何将CSV数据作为附件添加到内存中而不将文件保存到文件系统?
html - DotAll 和多行正则表达式
我在 Powershell 中使用 Rexex 时遇到了一点麻烦。似乎有一个实施错误或什么的。
我要使用的文本是一个 html 文件,如下所示(Example1):
问题是,由 html 编辑器引起的,我也可能会得到这样的东西(Example2):
如您所见,我们得到了换行符和 html 转义、固定空格
。
我的 Powershell 正则表达式如下所示:
还有这个
基本上[标记变量的开头,]标记变量的结尾。由此产生两个问题:
- 由于我们有两个变量,移动和传真,我
(.?){7}
用来允许一些(这里正好是 7 个)字符并避免匹配第一个 [ 靠近Mobile和最后一个 ] 靠近Fax之间的孔部分(如果我会使用会发生这种情况)(.*?)
而不是(.?){7}
)。我不确定是否有替代方法,例如,我可以在起始 [ 和变量关键字“Fax”之间允许任意数量(而不是 7 个)字符。当添加诸如此类的内容时,这对于避免不匹配很有用
(其中只有 7 个字符是不够的,就像我说的那样(.*?)
会失败)。希望我能够解释它(有点难) - 如果没有:请随时提问! - Powershells -replace 方法不提供设置正则表达式选项的方法,因此我必须使用 (?ms) 来设置 DotAll 和多行模式。如您所见,我在我的正则表达式模式中使用它。但是:当添加换行符时,正如您在示例 2中的Mobile:和%mobile%之间看到的那样,正则表达式失败并且没有任何内容被替换!
我非常感谢专业人士的任何帮助甚至正则表达式建议,以避免我现在没有考虑的任何进一步问题......
编辑:(示例 3):
powershell - 从没有 Job-Information 的 Powershell 作业返回数据
我正在做一份看起来像这样的工作
我开始并接受我的工作是这样的:
现在我希望我$result
只包含$data
返回的内容。但是,在检查$result
$data 之外,我会看到更多我不想包含在我的$data
数组中的信息。混乱的数据开始是这样的:
(返回数据:)
这样一遍又一遍地重复 20 次。之后我的真实$data
被列出。但是:这样迭代$result
数组是不可能的。我能做些什么?