问题标签 [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 回答
173 浏览

powershell - 将变量传递给powershell中的子进程

是否可以将所有 env 变量传递到一个新的 powershell 窗口,如下所示:

$var=10; Start-Process powershell '-command "echo $var; Start-Sleep -s 5; "'

这不会在子窗口上显示任何内容。

如果不可能拥有所有变量,如何传递其中的一些?

这个变量 (var) 与 env 变量不同吗?

0 投票
2 回答
210 浏览

powershell - Invoke-Expression - 将输出写入控制台但不从函数返回

我想Invoke-Expression在函数内部调用并将命令的输出打印到控制台,但不要从函数中返回它,因为我想从中返回一个特定的值。

这行得通,但我想避免使用 evilWrite-Host功能,所以我尝试Write-Information了。但我似乎无法通过管道输出Invoke-Expressionto Write-Information。当我简单地用它替换Write-Host时,Write-Information它的行为就像-MessageData没有提供参数(在明确声明时类似-MessageData)。

有没有办法将输出写入Invoke-Expression控制台,但避免在不使用的情况下从函数中返回它Write-Host

0 投票
1 回答
83 浏览

powershell - PSCustomObject 是否有显示到控制台的顺序?

各位早安,

我非常喜欢从列出的项目返回的值中进行选择。因此,我正在从C:\Users返回的值中进行选择,这是一种[PSCustomObject]类型的输入,但注意到了一些问题。我可以像这样将选择列出到[PSCustomObject]就好了:

..但是,当我尝试通过Read-Host在脚本末尾添加 a 来进行选择时,我首先得到该提示:

我错过了什么吗?为什么Read-Host在显示顶部对象之前提示我?在我选择大声笑之前我想看看选择

是否有显示顺序?

0 投票
1 回答
51 浏览

powershell - ScriptProperty 在作为命令调用时无法访问脚本的 cmdlet

给定诸如此 MRE 之类的代码:

如果我调用它,pwsh -File '.\Demo.ps1'那么一切都会按您的预期工作/我得到这个输出:

但是,如果我调用与我得到的相同的命令pwsh -Command '.\Demo.ps1'(即 Test2 为空白);虽然我希望得到与上述相同的结果:

即当我通过-Command参数调用时,ScriptProperty 无法访问脚本本身中定义的 cmdlet/函数;虽然可以访问标准的(例如Get-Date)。

我认为这是一个错误;PWSH 和 PowerShell 中只有相同的行为;这使得这种可能性降低了一点。

这是一个错误吗?或者我在我的理解中遗漏了什么。

0 投票
1 回答
85 浏览

multithreading - 为所有后台作业注册 trackingevent?

下午好,

我一直在尝试根据所有工作的完成时间来注册一个事件。我能够成功注册一个,但我希望在所有后台作业完成后弹出一条消息。任何人都熟悉如何做到这一点?

我尝试了以下操作,但错误地说作业为空:

我觉得一个Do{}Until()循环可以做到这一点,但我不知道如何注册它以检查,直到工作完成。还尝试跟随其他人使用不同语言完成它的一些方法,但是,我无法接受。

我不想发布我尝试过的所有内容,所以这篇文章不会让任何人感到厌烦。也在谷歌上搜索过,但是我找不到太多关于为多个工作注册一个对象的信息。

编辑 继承人什么有效:

这是我喜欢发生的事情,但要评估所有工作,而不仅仅是一个。

0 投票
0 回答
8 浏览

windows-server-2016 - 不使用脚本自动将主机名移动到所需的 OU

我已经创建了一个脚本,用于使用 PowerShell 5.1 将主机名自动移动到 Windows Server 2016 中的所需 OU,但它运行不正常。根据我的脚本,所有内容都进入我的第一个 OU 中的同一个 OU。有人可以帮我修改下面的脚本吗?

规则,

如果前 4 个字母是 ABFL 它应该移动到 ABFL

从第 5 到第 8 个字母来 THN 应该移动到 ABFL\THN

从第 5 到第 7 个字母,RT 应该搬到 ABFL\R-tech-park

从第 5 到第 7 个字母来 IB 应该移动到 ABFL\INDIABULLS

从第 5 到第 8 个字母,任何其他字母都应移至 ABFL\Branches

在数字 D 到来之前的最后一个主机名中,应该转到上面指定的桌面 OU

在数字 L 之前的最后一个主机名中,应该转到上面指定的笔记本电脑 OU

我的脚本脚本如下。

0 投票
2 回答
221 浏览

windows - 使用 PowerShell 反引号字符执行代码段不起作用

当我在此代码段上运行反引号 (`) 命令时:

我得到一些错误。这些错误是什么?

首先,通过在第一行按 F8,我得到这个:

不完整的字符串标记。+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : IncompleteString

目标运行代码段并假设 PC 将自动跳到下一行,因为它有 ` 字符

其次,当我只突出显示第一行时,通过单击行号的左侧,我现在得到了这个:

在行:1 字符:170

  • ... to" -and $_.startname -eq "localsystem"}|Select-Object displayname, `
    • CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    • FullyQualifiedErrorId : MissingExpression

目标运行代码段并假设 PC 将自动跳到下一行,因为它有 ` 字符

但是,当我按 F5 时,它就像一个魅力。请原谅我对 PowerShell 的无知,但我在这里做错了什么?

附加信息:这是我的 powershell 信息:

  • 名称:Windows PowerShell ISE 主机
  • 版本:5.1
0 投票
1 回答
217 浏览

powershell - 为什么我的 if 语句没有被正确阅读?

我有一个脚本,可以从本地或远程计算机备份用户配置文件并将其放置到共享上:$Global:Shared_BackupPath = "\\server\share\". 我已经对其进行了更多的调整,最后只是将一些变量变成了全局变量(不确定这是否是问题 -不明白为什么会这样)。

这是条件:

我试图改变它,-eq $null看看它是否会有所作为,但它没有。

它只是没有正确分析条件并在所有作业完成之前继续显示我的消息框:它“应该”等到没有更多事件然后显示消息框:

我觉得我可能有一个想法,因为事件本身被注册为工作,但不太确定如何去做,并让它等到它完成所有工作,然后再显示消息框,通知我复制完成时。除此之外,该脚本运行良好,任何阅读此内容的人都可以随意使用它。这是完整的脚本:

我删除了一些可能会给我带来麻烦的信息,但都是化妆品。(:

编辑: 我一定是在破解,但是,现在一切正常。我所做的唯一更改是$Global:var = $null在为其赋值之前清除全局变量 ( )。谢谢大家的建议。我做的另一个改变是Copy-Item改为Robocopy

0 投票
0 回答
66 浏览

powershell - 为什么我的 elseif 块在指定 -WhatIf 时运行

我在理解SupportsShouldProcess的文档时遇到了一些麻烦,我想看看是否有人可以把它分解得更清楚一些让我理解。

使用的链接


当前代码

问题

在我的Process{}块中,我有一个if(), 和elseif()条件来检查是否-Whatif已指定。

  • Test-ShouldProcess -WhatIf

我无法理解为什么我的elseif()语句在指定时运行,但是,我第一个条件下-WhatIf收到消息:if()

如果:对目标“DESKTOP-OEREJ77”执行“删除:C:\Users\Abraham\Desktop\FileToDelete.txt.FullName”操作。

..然而,它不会仅在我的elseif. 不是反过来吗?

我知道我明确告诉它在-WhatIf指定时运行该部分(我知道,有点回答我的问题)但是,我想看看它是否还有其他内容。似乎情况会反过来。

这对我来说只是一个额外的选择吗?

我只是想太多了吗?

0 投票
1 回答
85 浏览

powershell - Powershell:如何引用选择中的列

我正在使用 PowerShell 5.1 遍历活动目录中的计算机列表,并且我正在努力解决应该很简单的事情。

在下面的代码中,我在 foreach 循环中为每台计算机选择名称和描述。我应该如何在循环中单独引用名称和描述?

我能够使用它来工作select -ExpandProperty,但这似乎不必要地复杂。$computer 变量包含如下键/值对:

我尝试使用点表示法$computer.name $computer.description,但点被忽略并视为文本。

我试过用谷歌搜索这个,但我是 PowerShell 的新手,不知道如何表达我的问题!