相关疑难解决方法(0)

Powershell中的数组类型 - System.Object []与具有特定类型的数组

为什么GetType().Name在字符串数组上进行调用Object[]而不是String[]?这似乎发生在任何元素类型中,例如Import-Csv会给你一个Object[]但每个元素都是一个PSCustomObject.

这是一个带数组的例子 String

$x = @('a','b','c')

$x[0].GetType().Name #String
$x.GetType().Name #Object[]
Run Code Online (Sandbox Code Playgroud)

arrays collections powershell types coercion

11
推荐指数
2
解决办法
3万
查看次数

Powershell 数组扁平化是如何工作的?

请注意:

C:\> $x = @(1)
C:\> $x = @($x,2)
C:\> $x = @($x,3)
C:\> $x = @($x,4)
C:\> $x = @($x,5)
C:\> $x.Length
2
C:\> @($x |% { $_ }).Length
3
C:\> $x


Length         : 2
LongLength     : 2
Rank           : 1
SyncRoot       : {System.Object[] 2, 3}
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 2

4
5


C:\>
Run Code Online (Sandbox Code Playgroud)

我预计管道会压平列表。但这并没有发生。我究竟做错了什么?

arrays powershell

5
推荐指数
1
解决办法
527
查看次数

将字符串行放入“数组”中

我经常在 VSCode 中有几行字符串,但需要一个用于 PowerShell 或 SQL 的数组。

我在 VSCode 中有

line1
line2
line3
Run Code Online (Sandbox Code Playgroud)

我在 Vscode 中需要类似的东西

('line1','line2','line3')
Run Code Online (Sandbox Code Playgroud)

导致

Select * from Table where Column in ('line1','line2','line3')
Run Code Online (Sandbox Code Playgroud)

或者

$a = 'line1','line2','line3'
Run Code Online (Sandbox Code Playgroud)

有这个功能/扩展吗?

powershell visual-studio-code

2
推荐指数
2
解决办法
1149
查看次数

ForEach 方法后 PowerShell 长度的奇怪行为

官方文档中提到这Length是 的一个别名Count,但是我发现它们的行为不同的一种情况。此外,如果我ForEach用 替换 method ForEach-ObjectLength将会发出 3 。有人能解释一下吗?

> (1..3).ForEach({$_}).Length
1
1
1
Run Code Online (Sandbox Code Playgroud)
> (1..3).ForEach({$_}).Count
3
Run Code Online (Sandbox Code Playgroud)

powershell

2
推荐指数
1
解决办法
560
查看次数

ForEach-Object 以某种方式展平返回值

假设我想从文件中读取一些字符串,并且对于每个字符串我想将其拆分。最后,我想获得字符串数组的数组。我尝试这样做的方法如下:

$toArchive = "./folders.txt"
$folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
Run Code Online (Sandbox Code Playgroud)

Get-Content应该返回一个字符串数组,对于每个字符串,我希望得到另一个字符串数组。但我的却不folderList是这样Object[],好像它被压扁了。例如,如果我的输入文件如下所示:

Docs /home/keddad/Documents/
NotDocs /home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

我得到 4 个元素的数组:

Docs                                                                                                                                                                                                                                                                           
/home/keddad/Documents/                                                                                                                                                                                                                                                        
NotDocs                                                                                                                                                                                                                                                                        
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

更新:只是为了澄清一下,它绝对是 4 个字符串的数组:

PS /home/keddad/Documents/tbackup> $toArchive = "./folders.txt"
PS /home/keddad/Documents/tbackup> $folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
PS /home/keddad/Documents/tbackup> $folderList.count
4
PS /home/keddad/Documents/tbackup> $folderList
Docs
/home/keddad/Documents/
NotDocs
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

powershell

0
推荐指数
1
解决办法
230
查看次数