如何将大量输入传递给powershell

时间:2016-10-17 18:52:17

标签: powershell

假设powershell在其命令中有N个字符的限制,我如何将超过N个字符传递给powershell cmdlet?基于https://support.microsoft.com/en-in/kb/830473链接,似乎字符限制为8191,但它表示对于cmd.exe,不确定powershell的大小限制是多少。因此,如果我的输入大小超过> 8k,我可以将输入重定向到powershell以避免此问题(基于引用文档中提到的解决方案)。

例如:

powershell console $> echo“一个非常长的字符串”//整个命令包括echo和控制台上总共小于8192个字符的非常长的字符串。当我执行此操作时,我将整个字符串作为控制台上的输出

powershell console $> echo“一个非常长的字符串//尝试在非常长的字符串中添加字符,如果总数超过8192,则PowerShell不允许我向更长的字符串添加更多字符,因为我猜我已达到数字的限制我可以进入的角色。

我想要的是什么:

powershell console $> echo //将我的输入(超过8192个字符)放在一个文件中,并将其作为echo和echo的输入提供,以便在控制台上显示完整的字符串,从而避免命令中字符数量的限制。

我使用的命令echo仅用于表示目的,我想使用自定义cmdlet而不是那样,所以请认为这是一个有效的场景。

编辑2:

psm1文件:

Function DoSomething {

  [CmdletBinding()]
  Param(
    [Parameter(
     Mandatory = $False)
    ]
    [string]$v1,

    [Parameter(
     Mandatory = $False)
    ]
    [string]$v2)

    Begin {}

  Process {
    Write-Output "hello $v1 | $v2"
  }
}

文本文件内容说content.txt(用于表示目的的缩写,但假设这可以超过8k个字符):

-v1 "t1" -v2 "qwe"

现在我做的时候

powershell Console$> DoSomething (Get-Content content.txt)

我得到的输出是

hello -v1 "t1" -v2 "qwe" |

我希望输出为

hello -v1 "t1" | -v2 "qwe"

这样可以毫无问题地执行cmdlet。我用文本文件中超过8k字符的例子尝试了这个,它能够打印输出,只是参数没有分开。提供cmdlet输入的命令不一定是Get-Content,只要它可以工作就可以是任何东西。

2 个答案:

答案 0 :(得分:2)

您误解了PowerShell函数中的参数如何工作。 Get-Content的输出是一个字符串数组(文件中每行一个字符串),但整个数组都传递给第一个参数。此外,字符串不会被神奇地分割,因此子字符串可以转到几个参数。 PowerShell应该如何知道拆分字符串的方法?

处理此类输入数据的更好方法是让您的函数接受来自管道的输入:

Function DoSomething {
  [CmdletBinding()]
  Param(
    [Parameter(
      Mandatory=$false,
      ValueFromPipeline=$true,
      ValueFromPipelineByPropertyName=$true
    )]
    [string]$v1,

    [Parameter(
      Mandatory=$false,
      ValueFromPipeline=$true,
      ValueFromPipelineByPropertyName=$true
    )]
    [string]$v2
  )

  Process {
    Write-Output "hello $v1 | $v2"
  }
}

并将数据定义为CSV(与参数名称匹配的列名称):

v1,v2
"-v1 ""t1""","-v2 ""qwe"""

以便您可以将数据传输到函数中:

Import-Csv content.csv | DoSomething

使用这样构建的函数,您还可以将数据定义为哈希表并splat

$data = @{
  'v1' = '-v1 "t1"'
  'v2' = '-v2 ""qwe"'
}

DoSomething @data

有关函数参数的详细信息,请参阅about_Parametersabout_Functions_Advanced_Parameters

答案 1 :(得分:0)

否则,您可以传递路径文件,其中脚本ps中使用此文件的内容。没有限制......