假设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,只要它可以工作就可以是任何东西。
答案 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_Parameters
和about_Functions_Advanced_Parameters
。
答案 1 :(得分:0)
否则,您可以传递路径文件,其中脚本ps中使用此文件的内容。没有限制......