PSCustomObject 是否有其显示到控制台的顺序?
Does PSCustomObject have an order in which its displayed to the console?
早上好,
我非常喜欢从列出的项目返回的值中进行选择。因此,我正准备从 C:\Users 返回的值中进行选择,该值被输入到 [PSCustomObject]
类型中,但发现有些不对劲。我可以像这样将选择列到 [PSCustomObject]
中:
[array]$Userlist = Get-ChildItem C:\users | Sort-Object -Property LastWriteTime -Descending
for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}
#Output:
Profile Name Full Path Modified Time
------------ ------------- -------------
0: Abraham C:\users\Abraham 4/11/2021 10:26:58 PM
1: Public C:\users\Public 3/28/2021 8:51:28 AM
..但是,当我尝试通过在脚本末尾添加 Read-Host
来进行选择时,我首先得到提示:
[array]$Userlist = Get-ChildItem C:\users | Sort-Object -Property LastWriteTime -Descending
for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}
$ii = Read-Host -Prompt "Enter The Users Number to Delete"
$i = $ii -split " "
""
foreach($profile in $Userlist.baseName[$i]){
""
"Selection: $profile"
}
#output
Enter The Users Number to Delete: 1 <------ Here its asking first before displaying.
Profile Name Full Path Modified Time
------------ ------------- -------------
0: Abraham C:\users\Abraham 4/11/2021 10:26:58 PM
1: Public C:\users\Public 3/28/2021 8:51:28 AM
Selection: Public
我错过了什么吗?为什么我的 Read-Host
在我的顶部对象显示之前被提示?我想在选择之前先看看选择 lol
是否有显示顺序?
格式化系统如何给用户带来惊喜的类似示例。
有一个简单的 CSV
@'
OneProperty
test
'@ | ConvertFrom-Csv
OneProperty
-----------
test
还有一个
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv
OneProperty TwoProperty
----------- -----------
test1 test2
一切都如预期般完美。
但是运行这些加在一起
@'
OneProperty
test
'@ | ConvertFrom-Csv
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv
OneProperty
-----------
test
test1
第二个属性在哪里?好吧,第一个进入格式系统的对象是决定属性的对象。 Powershell 不会检查每一项,因为这可能会对性能造成很大影响。但是,如果您使用 Out-Host
、Out-Default
或任何 Format-*
cmdlet..
强制输出到格式化程序
@'
OneProperty
test
'@ | ConvertFrom-Csv | Out-Default
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv | Out-Default
OneProperty
-----------
test
OneProperty TwoProperty
----------- -----------
test1 test2
我们可以看到两者都显示完整。简而言之,Read-Host
cmdlet 将您的管道输出输出到格式化系统。
您还可以用子表达式包围 commands/sections 代码并将其通过管道传递给变量。
$(for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}) | Out-Default
早上好,
我非常喜欢从列出的项目返回的值中进行选择。因此,我正准备从 C:\Users 返回的值中进行选择,该值被输入到 [PSCustomObject]
类型中,但发现有些不对劲。我可以像这样将选择列到 [PSCustomObject]
中:
[array]$Userlist = Get-ChildItem C:\users | Sort-Object -Property LastWriteTime -Descending
for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}
#Output:
Profile Name Full Path Modified Time
------------ ------------- -------------
0: Abraham C:\users\Abraham 4/11/2021 10:26:58 PM
1: Public C:\users\Public 3/28/2021 8:51:28 AM
..但是,当我尝试通过在脚本末尾添加 Read-Host
来进行选择时,我首先得到提示:
[array]$Userlist = Get-ChildItem C:\users | Sort-Object -Property LastWriteTime -Descending
for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}
$ii = Read-Host -Prompt "Enter The Users Number to Delete"
$i = $ii -split " "
""
foreach($profile in $Userlist.baseName[$i]){
""
"Selection: $profile"
}
#output
Enter The Users Number to Delete: 1 <------ Here its asking first before displaying.
Profile Name Full Path Modified Time
------------ ------------- -------------
0: Abraham C:\users\Abraham 4/11/2021 10:26:58 PM
1: Public C:\users\Public 3/28/2021 8:51:28 AM
Selection: Public
我错过了什么吗?为什么我的 Read-Host
在我的顶部对象显示之前被提示?我想在选择之前先看看选择 lol
是否有显示顺序?
格式化系统如何给用户带来惊喜的类似示例。
有一个简单的 CSV
@'
OneProperty
test
'@ | ConvertFrom-Csv
OneProperty
-----------
test
还有一个
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv
OneProperty TwoProperty
----------- -----------
test1 test2
一切都如预期般完美。
但是运行这些加在一起
@'
OneProperty
test
'@ | ConvertFrom-Csv
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv
OneProperty
-----------
test
test1
第二个属性在哪里?好吧,第一个进入格式系统的对象是决定属性的对象。 Powershell 不会检查每一项,因为这可能会对性能造成很大影响。但是,如果您使用 Out-Host
、Out-Default
或任何 Format-*
cmdlet..
@'
OneProperty
test
'@ | ConvertFrom-Csv | Out-Default
@'
OneProperty,TwoProperty
test1,test2
'@ | ConvertFrom-Csv | Out-Default
OneProperty
-----------
test
OneProperty TwoProperty
----------- -----------
test1 test2
我们可以看到两者都显示完整。简而言之,Read-Host
cmdlet 将您的管道输出输出到格式化系统。
您还可以用子表达式包围 commands/sections 代码并将其通过管道传递给变量。
$(for($i=0; $i -lt $UserList.BaseName.count; $i++){
[PSCustomObject]@{
'Profile Name' = "$($i): $($UserList.BaseName[$i])"
' Full Path ' = $UserList.FullName[$i]
'Modified Time' = $UserList.LastWriteTime[$i]
}
}) | Out-Default