2012-08-23 49 views
2

我目前正在使用新的自足PowerShell腳本更新和替換舊的過時夜間計劃批處理文件。如何檢查已停止的網站並使用PowerShell功能啓動這些網站

我遇到麻煩的是網站啓動。我能夠使用當前的測試代碼來獲取網站列表並顯示它們,但無法找到正確啓動它們的方法(如果它們已停止)。

Set-ExecutionPolicy Unrestricted 
start-transcript -path C:\TESTSTART.TXT 
#function to get list of websites that are currently stopped 
function Get-StoppedSites { 
    Import-Module WebAdministration 
    $website = Get-ChildItem IIS:\Sites | where {$_.State -eq 'Stopped'} 
    write-host "$website is stopped" 
    } 
#function to start the stopped website 
function StartSites { 
    param(
    $websitename 
    ) 
    start-website $websitename 
    write-host "$website was started" 
    } 
$Script = Get-StoppedSites 
$Script | ForEach-Object{StartSites -websitename $website} 
stop-transcript 

當我把這種由PowerShell的,它就像它不出差錯完成,但該網站沒有開始,我已經停了下來。 Windows 2008 R2服務器,PS 2.0。一旦它準備好推出,我將在2003服務器上運行它。

這是我的成績單:

Transcript started, output file is C:\TESTSTART.TXT 
is stopped 
Start-Website : Cannot validate argument on parameter 'Name'. The argument is null. Supply a non-null argument and try 
the command again. 
At C:\Users\Administrator\Desktop\test.ps1:14 char:18 
+  start-website <<<< $websitename 
    + CategoryInfo   : InvalidData: (:) [Start-Website], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.IIs.PowerShell.Provider.StartWebsiteCommand 

was started 
********************** 
Windows PowerShell Transcript End 
End time: 20120823150248 

你們可以幫我找出哪裏/我在做什麼錯在這裏?謝謝!

回答

6

試試這個:

Set-ExecutionPolicy Unrestricted 

Import-Module WebAdministration 

$sites = Get-Website | where {$_.State -eq 'Stopped'} 

$sites | ForEach-Object { 
    $sitename = $_.name 
    IF ($sitename -ne $NULL) 
    { 
     Write-Host "$sitename is stopped. Starting it..." 
     Start-Website $sitename 
    } 
} 

有你的代碼一對夫婦的問題。最重要的是,Get-StoppedSites實際上並沒有返回任何東西,只是打印出名字。此外,您可以使用現有的命令行程序Get-Website獲取網站。

+0

謝謝!這現在對我有效。我有一種感覺,我正在考慮太多。 – bbinnebose

相關問題