-2

何が間違っているのかわかりません。web.config ファイルの検索 (< serverName >、ServerName、または localhost) を読み取り、コンピューター名に置き換えてから、ファイルを再度保存します。また、ドライバーの文字が何であれ、スクリプトが置かれている現在のドライブに変更したいと考えています。コードが乱雑であることはわかっていますが、スクリプトを書くスキルがまったくありません。そのため、それをクリーンアップするための提案があれば、それは役に立ちます。

$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
4

1 に答える 1

3

何が間違っているのかを特定しなかったので、私はそれをすべてざっと見ただけです。これはテストされていませんが、動作するはずです。

まず、すべてのコマンドを組み合わせることができる場合、複数の読み取りと書き込みを行っていますreplaceGet-Contentandで使用されるパスはSet-Content文字列である必要があるため、引用符で囲みます。ファイルが小さい限り、コンテンツを編集して保存する前に変数に格納する必要があります。これは、まだ使用中のファイルに書き込もうとするのを避ける簡単な方法です (あなたはそれを読んでいます)。最後に、正規表現を使用するため、 inと-replaceをエスケープする必要があります。\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.
于 2013-05-07T22:08:03.360 に答える