尝试将Powershell代码简化为单行
下面的代码片段获取路径列表,将每个路径的每个字符转换为其ASCII值,并将其存储在名为$output的变量中尝试将Powershell代码简化为单行,powershell,Powershell,下面的代码片段获取路径列表,将每个路径的每个字符转换为其ASCII值,并将其存储在名为$output的变量中 $itemlist = (Get-ChildItem -Recurse -Path "$data_path").FullName Foreach($item in $itemlist) { $output+= [int[]]@("$item").ToCharArray() -join ',' | Out-String } Write-Host $out
$itemlist = (Get-ChildItem -Recurse -Path "$data_path").FullName
Foreach($item in $itemlist)
{
$output+= [int[]]@("$item").ToCharArray() -join ',' | Out-String
}
Write-Host $output
$itemlist = (Get-ChildItem -Recurse -Path "$data_path").FullName
Foreach($item in $itemlist)
{
$output+= [int[]]@("$item").ToCharArray() -join ',' | Out-String
}
Write-Host $output
我试图在一行中实现所有这些(由于一个复杂的原因,它阻止我运行Powershell脚本),这样我就可以运行一个Powershell命令来获得相同的效果,但到目前为止,我遇到了困难
以下是我所取得的成就
(Get-ChildItem -Recurse -Path "$data_path").FullName | Format-Table -Property @{n='';e={[int[]]@($_).ToCharArray() -join ','}} | Out-Host
但是,输出没有ASCII值,输出中的路径以字符表示。有人能帮我解决这个问题吗 我想你可以用这个:
$itemlist = (Get-ChildItem -Recurse -Path "$data_path").FullName; Foreach($item in $itemlist){$output+= [int[]]@("$item").ToCharArray() -join ',' | Out-String};Write-Host $output
(Get-ChildItem -Recurse -Path "$data_path").FullName | ForEach-Object { [int[]]@("$_").ToCharArray() -join ',' } | Out-String
到目前为止,我所能想到的就是使用别名来进一步缩短它:
ls "$data_path" -r | %{[int[]]@($_.FullName).ToCharArray() -join ","} | Out-String
如果您是从cmd.exe
运行此命令,应该如何执行此操作:
$Command = @'
$itemlist = (Get-ChildItem -Recurse -Path "$data_path").FullName
Foreach($item in $itemlist)
{
$output+= [int[]]@("$item").ToCharArray() -join ',' | Out-String
}
Write-Host $output
'@
[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($Command))
最终结果:
powershell.exe -NoProfile -NoLogo -EncodedCommand JABpAHQAZQBtAGwAaQBzAHQAIAA9ACAAKABHAGUAdAAtAEMAaABpAGwAZABJAHQAZQBtACAALQBSAGUAYwB1AHIAcwBlACAALQBQAGEAdABoACAAIgAkAGQAYQB0AGEAXwBwAGEAdABoACIAKQAuAEYAdQBsAGwATgBhAG0AZQAgAAoAIABGAG8AcgBlAGEAYwBoACgAJABpAHQAZQBtACAAaQBuACAAJABpAHQAZQBtAGwAaQBzAHQAKQAKACAAIAAgACAAewAgAAoAIAAgACAAIAAgACQAbwB1AHQAcAB1AHQAKwA9ACAAWwBpAG4AdABbAF0AXQBAACgAIgAkAGkAdABlAG0AIgApAC4AVABvAEMAaABhAHIAQQByAHIAYQB5ACgAKQAgAC0AagBvAGkAbgAgACcALAAnACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcACgAgACAAIAAgAH0ACgAgAFcAcgBpAHQAZQAtAEgAbwBzAHQAIAAkAG8AdQB0AHAAdQB0AA==
如果这变成一场简短的比赛
ls $data_path -r|%{($_|% f*|% t*y|% toi*2 $null)-join','}|out-string
我正试图在一行中实现所有这些(由于一个复杂的原因,我无法运行Powershell脚本),以获得与原始代码相同的结果,我相信您必须将
字符串
从循环中取出-事实上甚至不需要它…为什么不使用-EncodedCommand
“ASCII值”,您指的是UTF-16代码单位。路径使用Unicode字符集。字符是UTF-16代码单位,一个或两个编码Unicode代码点。
ls $data_path -r|%{($_|% f*|% t*y|% toi*2 $null)-join','}|out-string