использование опции -Encoding OEM
на Out-File
, кажется, является решением этой проблемы, если кто-то еще сталкивается с ней.
Например: -
Out-File -FilePath "C:\Program Files (x86)\wamp\bin\apache\Apache2.2.11\conf\extra\httpd-vhosts.conf" -InputObject $conf -Encoding OEM
Редактировать: -
В конце концов я решил эту проблему, переписав скрипт на PHP, так как не смог заставить его работатьпоследовательно в Powershell.Вот мой сценарий, если другие считают его полезным, он предназначен для запуска из командной строки, например: -
php d:/scripts/newVHost.php www
Создает новый вызов виртуального хоста 'www'.
<?php
/**
* create a new vhost on this server
*
* @param host name
*/
$ds = DIRECTORY_SEPARATOR;
$eol = PHP_EOL;
// you may need to alter this if your host file is elsewhere
$hostsFile = "C:\Windows\System32\drivers\etc\hosts";
$hostFH = fopen($hostsFile, 'a+');
// you may need to alter this if your htttp-vhosts.conf file is elsewhere
$apacheVHfile = "C:\Program Files\wamp\bin\apache\Apache2.2.17\conf\extra\httpd-vhosts.conf";
$apacheFH = fopen($apacheVHfile, 'a+');
if($argc <= 1) die("You must specify a host name\n");
$hostName = $argv[1];
$pathName = "d:{$ds}www{$ds}$hostName";
echo "\nCreating new virtual host '$hostName'\n";
if(!file_exists($pathName)) mkdir($pathName);
$writeStr = "\n127.0.0.1 $hostName.localhost";
writeFile($hostFH, $writeStr, $hostsFile);
$writeStr = "<VirtualHost *:80>
DocumentRoot \"$pathName\"
ServerName $hostName.localhost
ErrorLog \"logs{$ds}$hostName.localhost-error.log\"
CustomLog \"logs{$ds}$hostName.localhost-access.log\" common
</VirtualHost>$eol";
writeFile($apacheFH, $writeStr, $apacheVHfile);
fclose($hostFH);
fclose($apacheFH);
echo "New virtual host $hostName created. Restart WAMP server\n";
echo "\n===================================\n\n";
function writeFile($file, $writeStr, $fileName = null){
$written = fwrite($file, $writeStr);
if($written){
echo "\nModified $fileName\n";
} else echo "\nCould not Modify $fileName\n";
}