Использование Add-Content с ForEach - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу запустить скрипт Powershell, который создаст еще один .ps1, который установит тип запуска службы обратно в исходное состояние. то есть. Агент SQL Server был установлен на Автоматический, поэтому установите его обратно на Автоматический. Поскольку мне нужно сделать это для удаленных серверов, это немного усложняет ситуацию. Вот мое слабое начало:

$SQLServices = Get-Service -ComputerName 'enter servername here' | Select-Object Name,DisplayName,Status,StartType | ?{$_.Displayname -match “SQL Server Agent” -AND $_.Status -eq "Running"}

ForEach {Add-Content -path 'c:\temp\RestartSQLServices.ps1' -value "Get-Service -ComputerName 'enter servername here' | Set-Service -Name $($_.Name) -StartupType $($_.StartType)"}

Новый PS1 должен читать:

Get-Service -ComputerName 'enter servername here' | Set-Service -Name SQLSERVERAGENT -StartupType Automatic

Но я не могу получить имя службы и начальный тип для чтения из $ SQLServices.

Мысль ???

1 Ответ

0 голосов
/ 10 ноября 2018

Почему вы пытаетесь создать другой скрипт?

Просто проверьте сервис и сбросьте его, и вы уверены, что используете правильное имя сервиса.

Get-Service -ComputerName 'LabSQL01' -Name '*SQL*'

# Results

Status   Name               DisplayName                           
------   ----               -----------                           
Running  MSSQLFDLauncher    SQL Full-text Filter Daemon Launche...
Running  MSSQLSERVER        SQL Server (MSSQLSERVER)              
Running  SQLBrowser         SQL Server Browser                    
Running  SQLSERVERAGENT     SQL Server Agent (MSSQLSERVER)        
Running  SQLTELEMETRY       SQL Server CEIP service (MSSQLSERVER) 
Running  SQLWriter          SQL Server VSS Writer 


($SQLServiceStatus = Get-Service -ComputerName 'LabSQL01' -Name 'SQL Server Agent (MSSQLSERVER)')

$SQLServiceStatus.StartType
Automatic

$SQLServiceStatus.Status
Running     

{Invoke-Command -ComputerName 'LabSQO01' -ScriptBlock {$SQLServiceStatus = Get-Service -ComputerName $env:COMPUTERNAME -Name 'SQL Server Agent (MSSQLSERVER)'

If ($SQLServiceStatus.Status -eq 'Running')
{Set-Service -Name $($SQLServiceStatus.Name) -StartupType Automatic -WhatIf}
Else{ Write-Warning -Message "$($SQLServiceStatus.Name) is already set to the current state" }}

* Обновление для OP *

Хорошо, тогда я не совсем уверен, почему forloop для одного компьютера, если у вас есть несколько серверов, на которые вы планируете ориентироваться, но для одной цели, как насчет.

New-Item -Path  "\\$LabSQL01\c$\temp" -Name 'RestartSQLServices.ps1' -ItemType File

# Results

    Directory: \\LabSQL01\c$\temp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        11/10/2018   3:39 PM          0 RestartSQLServices.ps1


Get-ChildItem -Path "\\$LabSQL01\c$\temp\RestartSQLServices.ps1"

# Results

    Directory: \\LabSQL01\c$\temp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        11/10/2018   3:39 PM          0 RestartSQLServices.ps1


$ScriptContents = @'
$SQLServiceStatus = Get-Service -ComputerName $env:COMPUTERNAME -Name 'SQL Server Agent (MSSQLSERVER)'

If ($SQLServiceStatus.Status -eq 'Running')
{Set-Service -Name $($SQLServiceStatus.Name) -StartupType Automatic -WhatIf}
Else{ Write-Warning -Message "$($SQLServiceStatus.Name) is already set to the current state" }
'@

Add-Content -Path "\\$LabSQL01\c$\temp\RestartSQLServices.ps1" -Value $ScriptContents


Get-Content -Path "\\$LabSQL01\c$\temp\RestartSQLServices.ps1"

# Results

$SQLServiceStatus = Get-Service -ComputerName $env:COMPUTERNAME -Name 'SQL Server Agent (MSSQLSERVER)'

If ($SQLServiceStatus.Status -eq 'Running')
{Set-Service -Name $($SQLServiceStatus.Name) -StartupType Automatic -WhatIf}
Else{ Write-Warning -Message "$($SQLServiceStatus.Name) is already set to the current state" }


Get-ChildItem -Path "\\$LabSQL01\c$\temp\RestartSQLServices.ps1"

# Results

    Directory: \\LabSQL01\c$\temp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        11/10/2018   3:45 PM        273 RestartSQLServices.ps1  

Конечно, его можно легко настроить для нескольких целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...