2015-03-31 52 views
0

我有,我想用所谓的test.ps1 PowerShell脚本,看起来像这样自动执行磁盘操作:Powershell脚本:当用手写入时工作,在生成时不起作用。

diskpart /s diskstuff.txt 

文件diskstuff.txt看起来是这样的:

list disk 
select disk 0 
list partition 

当我创建diskstuff.txt手使用notepad.exe,然后像这样运行:

PS C:\> powershell.exe .\test.ps1 

它运行正常,赋予我有关分区的信息。但我只想要一个文件来处理。所以,我在test2.ps1试过这个脚本:

$text1 = 'list disk' 
$text2 = 'select disk 0' 
$text3 = 'list partition' 
$text1 > 'diskstuff2.txt' 
$text2 >> 'diskstuff2.txt' 
$text3 >> 'diskstuff2.txt' 
diskpart /s diskstuff2.txt 

当我运行脚本:

PS C:\> powershell.exe .\test2.ps1 

它并没有从DISKPART返回任何有用的东西。我检查了diskstuff2.txtdiskstuff.txtnotepad.exe,它看起来完全一样。

我环视了一下网络,发现了一个更好的检查文件的方法。首先是手写代码文件的转储(diskstuff.txt)。

PS C:\> Get-Content diskstuff.txt -Encoding Byte 

结果的最后几行是

116 
105 
111 
110 
13 
10 

然后将所生成的文件的转储(diskstuff2.txt

PS C:\> Get-Content diskstuff.txt -Encoding Byte 

结果的最后几行是:

116 
0 
105 
0 
111 
0 
110 
0 
13 
0 
10 
0 

这表明我的脚本生成diskstuff2.txt是以某种方式在每个字符之间插入零。有没有一种方法可以让我的脚本生成diskstuff2.txt没有所有这些零,以便我可以按预期执行test2.ps1

回答

1

重定向运算符>>>对文件使用UTF-16编码。如果您需要不同的编码,那么您应该使用Out-FileSet-Content/Add-Content cmdlet。全部都有-Encoding参数来指定编码。

--------由Jay更新----------- 这是正确的方法。 test2.ps1的最终答案是:

$text1 = 'list disk' 
$text2 = 'select partition 0' 
$text3 = 'list partition' 
Set-Content -Path diskstuff2.txt -Value $text1 -Encoding UTF8 
Add-Content -Path diskstuff2.txt -Value $text2 -Encoding UTF8 
Add-Content -Path diskstuff2.txt -Value $text3 -Encoding UTF8 
diskpart /s diskstuff2.txt 
+0

谢谢@PetSerAl。这帮助了我很多。 – 2015-03-31 23:05:27

相关问题