问题标签 [psobject]

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

powershell - Powershell 脚本正在打印出相同路径的重复条目

我的目标是编写一个 powershell 脚本,它将递归地检查文件服务器中是否存在任何“x”(插入天数)旧或更旧的目录。

我最初遇到了一些问题,我想我已经解决了大部分问题。我遇到的问题之一是 248 个字符的路径限制。我发现我在我的代码中实现了一个自定义函数来绕过这个限制。

最终结果是我想输出文件夹的路径和 LastAccessTime 并将信息导出到易于阅读的 csv 文件中。

目前一切正常,但由于某种原因,我多次输出一些路径(重复,三倍,甚至 4 次)。我只希望它为每个目录和子目录输出一次。

我会很感激我能得到的任何指导。提前致谢。这是我的代码

我稍微更新了我的代码并简化了它。这是新代码。

FolderInfo 变量有时会打印出多次,但 FolderLeaf 变量会打印出一次。问题是,如果我从打印出 folderInfo 的详细信息中移动或删除结果变量,则不会打印出父目录。仅显示所有子目录。还有一些目录是空的,不会打印出来,我希望打印出所有目录,包括空目录。

更新后的代码似乎可以很好地打印所有目录,但正如我提到的,我仍然得到一些重复的 $FolderInfo 变量。

我想我必须输入一个条件或其他东西来检查它是否已经被处理,但我不确定我会使用哪个条件来做到这一点,这样它就不会被打印多次。

0 投票
0 回答
112 浏览

arrays - 在 do/until 循环中打印 Powershell 数组属性在循环第一次迭代后显示空白行

我正在尝试显示从 CSV 文件生成的数组中每一列的唯一值。

CSV 文件包含:

预期输出:

我遍历数组中的每个属性,打印出这些值。我在第一个循环中得到第一列的值,但之后的每一列都只打印一个空行(准确地说是 16 个空行)。

实际输出:

如何显示其他数组属性(列?)而不是空行?

0 投票
1 回答
1111 浏览

c# - 将 PSObject 从 JSON 反序列化为 C# 中的列表

我在 C# 中有一个应用程序,可以使用 PowerShell 显示来自 Active Directory 的信息。

如果对象返回至少两个元素的数据,例如:

然后一切都很好,List.Count = 2。但是,如果它返回一个元素:

然后List.Count = 0 并且有一个例外:

Newtonsoft.Json.JsonSerializationException:“无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[ConsoleApp1.userps]',因为该类型需要 JSON 数组(例如 [1,2,3])正确反序列化。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。
JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。
路径“名称”,第 2 行,位置 11。”</p>

我该如何解决这个问题,以便它适用于一个元素,也适用于几个元素?

0 投票
1 回答
42 浏览

powershell - 将 PSObject 正则表达式过滤结果与初始值名称相结合

需要在我的广告中的用户属性中搜索一些字符串数据。我相信我已经迈出了第一步并找到了它们,但是在将结果组合在一个表中时遇到了一些麻烦——我需要确定用户的 CN 或名称(用于区分对象的东西)。这是在任何字符串属性中搜索 12 到 16 个字符的代码:

这给了我一张桌子:

我知道管道的末端没有容纳 CN。我尝试使用foreach-object,但未能正确重写所有函数(例如psobject.properties)并维护管道。我需要类似的东西:

0 投票
2 回答
4982 浏览

powershell - PowerShell - 函数中的“写入输出”与“返回”

我已经使用 PowerShell 很多年了,我认为我已经掌握了它的一些更“古怪”的行为,但是我遇到了一个我无法做出头或尾的问题......

我一直使用“return”从函数返回值,但最近我想我应该看看 Write-Output 作为替代方案。但是,PowerShell 是 PowerShell,我发现了一些似乎没有意义的东西(至少对我来说):

输出:

$x 和 $y(或“写入输出”和“返回”)之间有什么区别,这意味着它们都是哈希表,但其中只有一个“-is”是 pscustomobject?除了明显检查变量中的每个哈希表是否也是 pscustomobject 之外,是否有一种通用的方法可以确定与代码的区别?

我的 $PSVersionTable 看起来像这样,以防此行为特定于特定版本的 PowerShell:

干杯,

0 投票
0 回答
2438 浏览

c# - 无法执行操作,因为运行空间未处于“打开”状态。运行空间的当前状态是“破碎”

我有一个包含 2 个项目的示例解决方案(VS 2017,C#):

  • 控制台应用程序:
    • 程序.cs
    • 脚本文件夹:
      • Aaa.ps1(参考)
    • nuget包:
      • Npgsql v4.02
      • System.Management.Automation.dll v10.0.10586
  • PowerShell 脚本项目:
    • aaa.ps1

Aaa.ps1 执行简单的 Select 查询以检索一个值并将其传递给控制台应用程序 cs 并在控制台上显示它。

aaa.ps1

以上工作正常。我总是有包含 3 个项目的 PSOutput 集合和我需要从 SQL 返回的数据。

但是,当我将相同的方法应用于我的工作更大的解决方案时,它不起作用。我做了什么:

  • 使用相同的 Aaa.ps1 脚本创建了相同的 PowerShell 脚本项目
  • 将与 Program.cs 中相同的实现添加到我的 CodedUI 项目到实用程序方法中。还将相同的 nuget 包添加到 CodedUI 项目以处理 PowerShell 和 Postgres 位。

结果,我有两种不同的错误/行为:

  • 有时我得到:无法执行操作,因为运行空间未处于“打开”状态。运行空间的当前状态是“破碎”。
  • 有时 PSOutput 集合有两个始终为空的项目。

有人可以告诉我我做错了什么吗?

0 投票
1 回答
109 浏览

powershell - 具有关系值的 PSObject - 一对多

想要填充以下 PSObject,以便它可以在 IP 和主机名之间具有一对一或一对多的关系。

这给了我正确的标题,但是当我尝试添加多个值时,尝试添加重复值时会出错:

为什么是这样?

可以相当容易地做到一对多:

其中任何一个都是额外的数据集:

0 投票
2 回答
741 浏览

vb.net - vb.net 将 objectmodel.collection(of PSObject) 的 powershell 输出转换为可用的 VB.net 对象

我正在使用 vb.net 远程运行一些 powershell 命令,powershell.invoke 的输出是

类型。

我想将这些转换为可用的 vb.net 类/集合。当我调试代码并将鼠标悬停在输出 / ObjectModel.Collection(Of PSObject) 上时,数据显示为;

如何将其转换为可用的 vb.net 类/对象?

我试着像这样制作一个自定义类;

然后将其投射到对象上;

输出是 objectmodel.collection(of PSObject) 类型。

但是在试播之后,MyBookOwner 保持为空。

如何将 ObjectModel.Collection(Of PSOject) 转换为可用的 vb.net 对象。

0 投票
1 回答
139 浏览

powershell - 在嵌套 PSObject 属性上重载 ToString 的问题

我已经创建了一个具有各种属性的自定义 PSObject,并且我正在尝试为其中一些属性重载 ToString。我在 TimeSpan 属性之一上取得了成功,但在 WMI 对象上却没有。

一切似乎工作正常,但 DriveInfo 过载。我只是得到“System.Object []”作为它的回报。对我来说奇怪的是,当我执行 $result.ToString() 时,我得到以下信息(请参阅“可用空间”):

$result.Uptime.ToString():

$result.DriveInfo.ToString():

我可能遗漏了一些明显的东西,但在这一点上我迷路了。感谢您提前提供的任何帮助!

0 投票
1 回答
858 浏览

c# - 如何使用 C# Powershell System.Management.Automation 将 PSObject 转换为流输出或 DataTable

我需要以与 PowerShell 相同的方式将 PowerShell PSObject 转换为流。PowerShell 还以通用方式提供标准流的输出。

例如$PSVersionTable,仅输出 2 列(名称、值)而不是整个哈希表。因此,我希望每个 PSObject 都以与 PowerShell 在后台执行的方式相同的标准方式进行处理。此外,我想将其转换为 DataTable。我知道,还有其他链接说明了这个问题,但它们正在对 PSObject 的所有属性进行操作。不知何故,PowerShell 开箱即用。

我需要将 PSObject 转换为其他类型吗?

例子

PowerShell 脚本输出$PSVersionTable

$hostGet-Host输出为

Get-WebApplication输出

Get-ChildItem -Path "C:\TestDirectory\TestSubDir\Studio"

同样,可能还有其他引用或自定义类型。

我想在 C# 中以相同的方式获取这些输出,并且需要将它们显示为 String 或 DataTable。是否有任何从 PSObject 到流的转换或以完全通用的方式返回以上输出的东西?

当我在 C# 中处理以下方法时: