在 PowerShell 中逐行处理输入 [string]

威廉·约翰·霍尔登

我正在编写一个函数,用于在 PowerShell 中将 IP 地址列表从点分十进制形式转换为无符号整数。这是我的功能:

function Convert-IPtoInteger() {

    param(
        [Parameter(Mandatory=$true, Position=0, ParameterSetName="IP Address",
            ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [string] $addresses
    )

    process {
        foreach ($ip in $addresses) {
            if ($ip -match '(\d\d?\d?\.){3}\d\d?\d?') { # approximate regex, matches some impossible addresses like 999.0.0.0
                $s = "$ip".Split(".");
                [uint32] $x = 0;
                (0..3) | ForEach-Object { # positions 0, 1, 2, 3 in previous string
                    $x = $x -shl 8; # bit shift previous value to the left by 8 bits
                    $x += $s[$_];
                }
                Write-Output $x;
            }
        }
    }
}

我曾尝试将其$addresses声明为如图所示的标量和[string[]]数组。在这两种情况下,管道多行(使用 shift-enter 创建)会在第一个元素之后导致错误。如果我使用该Get-Content命令从文件中读取相同的文本,程序将按预期完成。

PS C:\...\1> $example = "192.168.1.1
192.168.2.1"

PS C:\...\1> $example | Convert-IPtoInteger
Cannot convert value "1
192" to type "System.UInt32". Error: "Input string was not in a correct format."
At C:\...\.ps1:16 char:18
+                     $x += $s[$_];
+                     ~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

3232235776

PS C:\...\1> $example > example.txt

PS C:\...\1> Get-Content .\example.txt | Convert-IPtoInteger
3232235777
3232236033

我相信不同之处在于 PowerShell 如何处理换行符。第 16 行 ( $x += $s[$_]) 似乎以相同的方式读取“1`n192”,而不是将每个元素作为独立$ipforeach语句的元素接收

Get-Member命令显示这$example | Get-MemberSystem.Stringjust like 的一个实例Get-Content .\example.txt | Get-Member

我希望我的程序能够正确接受来自文本文件和字符串的输入。我在这里缺少什么?为什么Get-Content解析与多行字符串不同?

欧文以扫

将 IP 地址放在一个对象数组中:

$example = @("192.168.1.1", "192.168.2.1")
$example | convert-IPtointeger

结果:

3232235777 
3232236033

之所以不同,是因为您对字符串使用 Foreach-Object:

$example1 = @("192.168.1.1", "192.168.2.1") 
$example1.GetType()

$example2 = "192.168.1.1
192.168.2.1"
$example2.GetType()

$example3 = (Get-Content "C:\Users\owain.esau\Desktop\links.txt" )
$example3.GetType()

这将返回以下内容

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                          
-------- -------- ----                                     --------                                                                                                                                                                          
True     True     Object[]                                 System.Array                                                                                                                                                                      
True     True     String                                   System.Object                                                                                                                                                                     
True     True     Object[]                                 System.Array  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Powershell中处理String参数的布尔值

来自分类Dev

在Powershell中处理String参数的布尔值

来自分类Dev

逐行处理标准输入

来自分类Dev

Powershell中的异常处理

来自分类Dev

如何处理用户输入的String中的使徒符?

来自分类Dev

Powershell函数中的$ string.IndexOf('。')返回方法调用失败

来自分类Dev

在powershell中逐行/逐字段(管道分隔)读取文件

来自分类Dev

在Powershell中测试远程处理?

来自分类Dev

Powershell脚本逐行在Powershell窗口上运行,但不能在脚本中运行

来自分类Dev

Powershell脚本逐行在Powershell窗口上运行,但不能在脚本中运行

来自分类Dev

Safely converting string to bool in PowerShell

来自分类Dev

Powershell将String []转换为List <String>

来自分类Dev

Powershell将String []转换为List <String>

来自分类Dev

从外壳逐行处理输入(带空行)

来自分类Dev

Powershell函数可以处理多种输入类型吗?

来自分类Dev

在Powershell中执行批处理文件

来自分类Dev

计算Powershell中处理功能的时间

来自分类Dev

Powershell中未处理异常的默认行为

来自分类Dev

“ true”搞乱了Powershell中的转义代码处理?

来自分类Dev

在Powershell中处理字符串

来自分类Dev

处理Powershell阵列中的项目-多个项目

来自分类Dev

在Powershell中处理XML名称空间

来自分类Dev

计算Powershell中处理功能的时间

来自分类Dev

用户在自动Powershell脚本中输入

来自分类Dev

验证Powershell中输入的文件名

来自分类Dev

在Powershell中,[string []]是哪种数据类型,什么时候使用?

来自分类Dev

使用Select-String检查Powershell中的两个.txt文件

来自分类Dev

在Powershell中,如何通过从命令行传递的“剩余”参数构建String数组?

来自分类Dev

从模块处理PowerShell错误

Related 相关文章

  1. 1

    在Powershell中处理String参数的布尔值

  2. 2

    在Powershell中处理String参数的布尔值

  3. 3

    逐行处理标准输入

  4. 4

    Powershell中的异常处理

  5. 5

    如何处理用户输入的String中的使徒符?

  6. 6

    Powershell函数中的$ string.IndexOf('。')返回方法调用失败

  7. 7

    在powershell中逐行/逐字段(管道分隔)读取文件

  8. 8

    在Powershell中测试远程处理?

  9. 9

    Powershell脚本逐行在Powershell窗口上运行,但不能在脚本中运行

  10. 10

    Powershell脚本逐行在Powershell窗口上运行,但不能在脚本中运行

  11. 11

    Safely converting string to bool in PowerShell

  12. 12

    Powershell将String []转换为List <String>

  13. 13

    Powershell将String []转换为List <String>

  14. 14

    从外壳逐行处理输入(带空行)

  15. 15

    Powershell函数可以处理多种输入类型吗?

  16. 16

    在Powershell中执行批处理文件

  17. 17

    计算Powershell中处理功能的时间

  18. 18

    Powershell中未处理异常的默认行为

  19. 19

    “ true”搞乱了Powershell中的转义代码处理?

  20. 20

    在Powershell中处理字符串

  21. 21

    处理Powershell阵列中的项目-多个项目

  22. 22

    在Powershell中处理XML名称空间

  23. 23

    计算Powershell中处理功能的时间

  24. 24

    用户在自动Powershell脚本中输入

  25. 25

    验证Powershell中输入的文件名

  26. 26

    在Powershell中,[string []]是哪种数据类型,什么时候使用?

  27. 27

    使用Select-String检查Powershell中的两个.txt文件

  28. 28

    在Powershell中,如何通过从命令行传递的“剩余”参数构建String数组?

  29. 29

    从模块处理PowerShell错误

热门标签

归档