2013-05-07 4 views
-2

Я не могу понять, что я делаю неправильно. Я хочу, чтобы он читал файл web.config find (< имя_сервера>, имя_сервера или localhost) и заменил имя_компьютера, а затем снова сохранил файл. Я также хочу изменить любое письмо драйвера на текущий диск, на котором сидит скрипт. Я знаю, что мой код грязный, но у меня нет навыков написания сценариев. поэтому, если у вас есть предложения по его очистке, это поможет.Найти и заменить powershell

$env:CD = (get-location).drive.root; 
$env:CL = get-location 

Get-Content ($env:cl\wwwroot\GBMain\Web.config) | ForEach-Object { $_ -replace "<serverName>", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBMain\Web.config) 
Get-Content ($env:cl\wwwroot\GBMain\Web.config) | ForEach-Object { $_ -replace "ServerName", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBMain\Web.config) 
Get-Content ($env:cl\wwwroot\GBMain\Web.config) | ForEach-Object { $_ -replace "localhost", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBMain\Web.config) 
Get-Content ($env:cl\wwwroot\GBMain\Web.config) | ForEach-Object { $_ -replace "D:\", "$env:cd" } | Set-Content ($env:cl\wwwroot\GBMain\Web.config) 
Get-Content ($env:cl\wwwroot\GBMain\Web.config) | ForEach-Object { $_ -replace "C:\", "$env:cd" } | Set-Content ($env:cl\wwwroot\GBMain\Web.config) 

Get-Content ($env:cl\wwwroot\GBReporting\Web.config) | ForEach-Object { $_ -replace "<serverName>", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBReporting\Web.config) 
Get-Content ($env:cl\wwwroot\GBReporting\Web.config) | ForEach-Object { $_ -replace "ServerName", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBReporting\Web.config) 
Get-Content ($env:cl\wwwroot\GBReporting\Web.config) | ForEach-Object { $_ -replace "localhost", "$env:COMPUTERNAME" } | Set-Content ($env:cl\wwwroot\GBReporting\Web.config) 
Get-Content ($env:cl\wwwroot\GBReporting\Web.config) | ForEach-Object { $_ -replace "D:\", "$env:cd" } | Set-Content ($env:cl\wwwroot\GBReporting\Web.config) 
Get-Content ($env:cl\wwwroot\GBReporting\Web.config) | ForEach-Object { $_ -replace "C:\", "$env:cd" } | Set-Content ($env:cl\wwwroot\GBReporting\Web.config) 

Exit 
+0

Хорошее начало будет говорить нам, что не работает. Какие ошибки вы получаете? –

ответ

3

Поскольку вы не указали, что не так, я просто просмотрел все это. Это не проверено, но я считаю, что он должен работать.

Во-первых, вы делаете многократные чтения и записи, когда можете объединить все команды replace. Пути, используемые в Get-Content и Set-Content, должны быть строками, поэтому цитируйте их. Пока файлы невелики, вы должны сохранить содержимое в переменной перед редактированием и сохранением. Это простой способ избежать попытки записи в файл, который все еще используется (вы его читаете). Наконец, -replace использует regex, поэтому вам нужно избежать \ в C:\ и D:\.

$env:CD = (get-location).drive.root; 
$env:CL = get-location 

$cont = Get-Content "$env:cl\wwwroot\GBMain\Web.config" 
$cont | ForEach-Object { 
    $_ -replace "<serverName>", "$env:COMPUTERNAME" -replace "ServerName", "$env:COMPUTERNAME" -replace "localhost", "$env:COMPUTERNAME" -replace "C:\\", "$env:cd" -replace "D:\\", "$env:cd" } | 
Set-Content "$env:cl\wwwroot\GBMain\Web.config" 

$cont = Get-Content "$env:cl\wwwroot\GBReporting\Web.config" 
$cont | ForEach-Object { 
    $_ -replace "<serverName>", "$env:COMPUTERNAME" -replace "ServerName", "$env:COMPUTERNAME" -replace "localhost", "$env:COMPUTERNAME" -replace "C:\\", "$env:cd" -replace "D:\\", "$env:cd" } | 
Set-Content "$env:cl\wwwroot\GBReporting\Web.config" 


#Exit is unnecessary. A PowerShell script exists when it's done. 
+0

Он работал Perfect Thanks Graimer – Todd

Смежные вопросы