2016-08-31 4 views
1

Я пытаюсь написать скрипт для отслеживания URL-адресов. Я сумел получить информацию, которую я хочу, и мой сценарий выглядит следующим образомПереименование переменной в PowerShell

$logfile = "C:\LogFileTest.log" 
Function WriteHeader-Websites { 
    [cmdletbinding()] 
    param (
     [string]$URL 
    ) 
    if ($logfile -eq "nologfile"){ 
     write-host 
     write-host "$URL" 
     write-host 
    } 
    else { 
     add-content -path $logfile -value "" 
     add-content -path $logfile -value "$URL" 
     add-content -path $logfile -value "" 
    } 
} 

Function Test-Websites { 
$URLs = Get-Content -Path C:\WebsiteChecks.txt 
foreach ($URL in $URLs) { 
$ArrayLine =$Line.split(",") 
    $ 
    $Line.name = 
    try { 
     $request = [System.Net.WebRequest]::Create($URL) 
     $response = $request.GetResponse() 
     WriteHeader-Websites "$URL is available!" 
    } catch { 
     WriteHeader-Websites ("$URL failed! The error message was '{0}'." -f $_) 
    } finally { 
      if ($response) { 
       $response.Close() 
       Remove-Variable response 
      } 
     } 
    } 
} 

Test-Websites 

Мой текстовый файл выглядит следующим образом:

http://www.google.com 
http://www.bing.com 
http://www.bbc.co.uk 

И выход из сценария выглядит следующим образом:

http://www.google.com is available! 

Я хотел бы добавить короткое имя для сайтов в текстовом файле, поэтому вместо этого оно использует это имя.

Пример текстового файла не будет:

http://www.google.com,Google Website 
http://www.bing.com,Bing Website 

, и я хотел бы возвращение выглядеть следующим образом:

Google Website is available! 
Bing Website is available! 

или

Google Website failed! Error message is... 

Но у меня нет идея, как это сделать, или то, что я даже Google мог бы найти. Какие-либо предложения?

Благодаря

ответ

0

Самый простой способ сделать это было бы создать CSV-файл с заголовками, то вы можете обратиться к столбцам, используя их заголовки.

url,description 
http://www.google.com,Google Website 
http://www.bing.com,Bing Website 

Затем используйте Import-Csv импортировать файл, так что вы могли бы сделать что-то вроде этого:

Import-Csv -Path C:\WebsiteChecks.txt | % { 
    $_.description 
    $_.url 
} 

Update Вот ваш код переписан с использованием Import-Csv уведомления я положил описание в его собственной переменная as $ _ будет обновляться по исключению в вашей выписке.

$logfile = "C:\LogFileTest.log" 

Function WriteHeader-Websites { 
    [cmdletbinding()] 
    param (
     [string]$URL 
    ) 
    if ($logfile -eq "nologfile"){ 
     write-host 
     write-host "$URL" 
     write-host 
    } 
    else { 
     add-content -path $logfile -value "" 
     add-content -path $logfile -value "$URL" 
     add-content -path $logfile -value "" 
    } 
} 

Function Test-Websites { 

    Import-Csv -Path C:\WebsiteChecks.txt | % { 

    $url = $_.url 
    $description = $_.description 

    try { 
     $request = [System.Net.WebRequest]::Create($url) 
     $response = $request.GetResponse() 
     WriteHeader-Websites "$description is available!" 
    } catch { 
     WriteHeader-Websites ("$description failed! The error message was '{0}'." -f $_) 
    } finally { 
      if ($response) { 
       $response.Close() 
       Remove-Variable response 
      } 
     } 
    } 
} 

Test-Websites 
+0

Hi David. Спасибо за ваш вклад. Я довольно новичок во всем этом, поэтому я не уверен, как на самом деле редактировать мой скрипт, чтобы сделать эту работу? Извиняюсь. – jakeythehobo

+1

На самом деле вам не нужно включать заголовки в файл CSV. Вы можете использовать пользовательские с аргументом '-Header' для' Import-Csv'. – Joey

+0

@Joey спасибо, я никогда не знал, что –

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