相关疑难解决方法(0)

PowerShell,格式化另一种文化中的值

在PowerShell中有一种简单的方法可以在另一个语言环境中格式化数字等吗?我目前正在编写一些函数来简化SVG生成,SVG .用作小数分隔符,而PowerShell de-DE在将浮点数转换为字符串时遵循我的语言环境设置().

是否有一种简单的方法可以为函数设置另一个区域设置,而不会粘连

.ToString((New-Object Globalization.CultureInfo ""))
Run Code Online (Sandbox Code Playgroud)

每个double变量之后?

注意:这是关于用于格式化的语言环境,而不是格式字符串.

(附带问题:在这种情况下我应该使用不变文化en-US吗?或者更确切地说?)

ETA:嗯,我在这里尝试的是以下内容:

function New-SvgWave([int]$HalfWaves, [double]$Amplitude, [switch]$Upwards) {
    "<path d='M0,0q0.5,{0} 1,0{1}v1q-0.5,{2} -1,0{3}z'/>" -f (
        $(if ($Upwards) {-$Amplitude} else {$Amplitude}),
        ("t1,0" * ($HalfWaves - 1)),
        $(if ($Upwards -xor ($HalfWaves % 2 -eq 0)) {-$Amplitude} else {$Amplitude}),
        ("t-1,0" * ($HalfWaves - 1))
    )
}
Run Code Online (Sandbox Code Playgroud)

对于我倾向于一直写的东西只是一点点自动化,双值需要使用小数点而不是逗号(它们在我的语言环境中使用).

ETA2:有趣的琐事补充:

PS Home:> $d=1.23
PS Home:> $d
1,23
PS Home:> "$d"
1.23
Run Code Online (Sandbox Code Playgroud)

通过将变量放入字符串中,设置的语言环境似乎不适用于某种程度.

powershell locale number-formatting

8
推荐指数
3
解决办法
1万
查看次数

没有'.Count'属性的对象 - 使用@()(数组子表达式运算符)与[Array]强制转换

我试图执行一些简单的if语句,但所有基于[Microsoft.Management.Infrastructure.CimInstance]的新cmdlet似乎都没有公开.count方法?

$Disks = Get-Disk
$Disks.Count
Run Code Online (Sandbox Code Playgroud)

不归还任何东西.我发现我可以将它转换为[数组],这使得它返回一个.NET .count方法,如预期的那样.

[Array]$Disks = Get-Disk
$Disks.Count
Run Code Online (Sandbox Code Playgroud)

这可以直接将其作为以前cmdlet的数组投射:

(Get-Services).Count
Run Code Online (Sandbox Code Playgroud)

推荐的解决方法是什么?

一个不起作用的例子:

$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
   Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
   Else If ($PageDisk.Count -eq 1) { Do X }
Run Code Online (Sandbox Code Playgroud)

选项A(演员阵容):

[Array]$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue} …
Run Code Online (Sandbox Code Playgroud)

arrays powershell cmdlets scalar cim

6
推荐指数
1
解决办法
804
查看次数

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
查看次数

如何强制具有一个元素的数组在json中生成方括号

我正在尝试使用以下方法创建 JSON 数组:

$bodyObject = @(
    @{    
        'Username' = 'email0@email.com'        
    }
)

$body = $bodyObject | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)

但该$body对象不包含方括号:

{
    "Username":  "email0@email.com"
}
Run Code Online (Sandbox Code Playgroud)

如果我向数组添加另一个元素,代码将完美运行:

$bodyObject = @(
    @{    
        'Username' = 'email0@email.com'        
    },
    @{    
        'Username' = 'email1@email.com'        
    }
)

$body = $bodyObject | ConvertTo-Json
<# Output:
[
    {
        "Username":  "email0@email.com"
    },
    {
        "Username":  "email1@email.com"
    }
]
#>
Run Code Online (Sandbox Code Playgroud)

如何获取一个元素数组来生成包含方括号的 JSON?

arrays powershell json

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

将 PowerShell 阵列分成更小的阵列组

我想根据变量将单个数组转换为一组较小的数组。所以,0,1,2,3,4,5,6,7,8,9将成为0,1,2,3,4,5,6,7,8,9当大小为3。

我目前的做法:

$ids=@(0,1,2,3,4,5,6,7,8,9)
$size=3

0..[math]::Round($ids.count/$size) | % { 

    # slice first elements
    $x = $ids[0..($size-1)]

    # redefine array w/ remaining values
    $ids = $ids[$size..$ids.Length]

    # return elements (as an array, which isn't happening)
    $x

} | % { "IDS: $($_ -Join ",")" }
Run Code Online (Sandbox Code Playgroud)

产生:

IDS: 0
IDS: 1
IDS: 2
IDS: 3
IDS: 4
IDS: 5
IDS: 6
IDS: 7
IDS: 8
IDS: 9
Run Code Online (Sandbox Code Playgroud)

我希望它是:

IDS: 0,1,2
IDS: 3,4,5
IDS: …
Run Code Online (Sandbox Code Playgroud)

arrays powershell data-partitioning

3
推荐指数
3
解决办法
3496
查看次数

PowerShell 5.1 为什么这两个函数返回不同的类型

function Main {
    $result1 = DoWork1
    $result1.GetType()

    $result2 = DoWork2
    $result2.GetType()
}

function DoWork1 {
    $result1 = Invoke-Sqlcmd -Query "select top 1 * from customer" -ServerInstance "(localdb)\MSSQLLocalDB" -Database "Database1" -OutputAs DataTables
    #assign to variable then return
    return $result1
}

function DoWork2 {
    #return results without assigning to variable
    return Invoke-Sqlcmd -Query "select top 1 * from customer" -ServerInstance "(localdb)\MSSQLLocalDB" -Database "Database1" -OutputAs DataTables
}

Main
Run Code Online (Sandbox Code Playgroud)

这是意外的输出:

IsPublic IsSerial Name                                     BaseType                                                                                    
-------- -------- ----                                     --------                                                                                    
True     False    DataRow                                  System.Object                                                                               
True     True …
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
151
查看次数

具有意外结果的 HashTable 枚举

这可能是一个愚蠢的问题,所以请友善,哈哈。我正试图集中精力思考我刚刚遇到的事情。

第一的

我有一个可以使用以下内容枚举的哈希表:

$ht = [hashtable]@{"Key1"="Value1";"Key2"="Value2"}
$ht.GetEnumerator()

Name                           Value
----                           -----
Key1                           Value1
Key2                           Value2
Run Code Online (Sandbox Code Playgroud)

如果我将其存储到一个变量中,则它仅在该变量的一次调用中存在。

$KeyPairs = $ht.GetEnumerator()
$KeyPairs

Name                           Value
----                           -----
Key1                           Value1
Key2                           Value2

$KeyPairs
# Nothing is returned as if $KeyPairs lost its value
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么会这样吗?

第二

通常,对于集合,我有时想要针对单个项目进行测试(例如查看一个实例的属性),我可以使用 Select-Object 或通过索引:

$array = @("Value1","Value2")
$array | select -first 1
Value1

$array[0]
Value1
Run Code Online (Sandbox Code Playgroud)

哈希表枚举器似乎只支持 Select-Option,而不支持索引。

$ht = [hashtable]@{"Key1"="Value1";"Key2"="Value2"}
$ht.GetEnumerator() | Select -first 1
$ht.GetEnumerator() | Select -first 1

Name                           Value
----                           -----
Key1                           Value1


($ht.GetEnumerator() | measure).count
2 …
Run Code Online (Sandbox Code Playgroud)

powershell enumeration hashtable enumerator

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

Powershell:始终生成空文件(比较对象的输出)

此问题最流行的答案涉及以下 Windows powershell 代码(已编辑以修复错误):

$file1 = Get-Content C:\temp\file1.txt  
$file2 = Get-Content C:\temp\file2.txt   
$Diff = Compare-Object $File1 $File2  
$LeftSide = ($Diff | Where-Object {$_.SideIndicator -eq '<='}).InputObject  
$LeftSide | Set-Content C:\temp\file3.txt
Run Code Online (Sandbox Code Playgroud)

我总是得到一个零字节文件作为输出,即使我删除了 $Diff 行。

为什么输出文件总是为空,如何修复?

windows powershell compare file member-enumeration

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