在远程计算机上使用Powershell启动和停止APP池

时间:2016-11-29 14:58:56

标签: powershell iis-7 powershell-v2.0

我正在尝试让PowerShell在提供凭据后停止并在远程计算机上启动AppPool。

启动应用程序池的功能:

Function fnStartApplicationPool([string]$appPoolName)
{
  import-module WebAdministration
   if((Get-WebAppPoolState $appPoolName).Value -ne 'Started')
   {
      Start-WebAppPool -Name $appPoolName
   }
}

停止应用程序池的功能:

Function fnStopApplicationPool([string]$appPoolName)
{
  import-module WebAdministration
   if((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped')
   {
      Stop-WebAppPool -Name $appPoolName
   }
}

我的代码无效:

 if ($pathback -eq $false) 
   { 
      #Copying Data from Source to Destination
      copy-Item  -Recurse $backupsrc -Destination $backupdes 
      write-host "Backup Successful" 

      #Validating the apppool value
      import-module WebAdministration 
      if((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped') 
      {
        #Stop apppool       
        Stop-WebAppPool -Name $appPoolName 
        write-host "AppPool Stopped Successfully"
      }
      #Copying Data from Source to Destination

      #Start apppool
      Start-WebAppPool -Name $appPoolName 
      write-host "AppPool Started Sucessfully"
      cd c:\  
   } 

1 个答案:

答案 0 :(得分:3)

要远程运行脚本,您必须确保已启用 PS-Remoting

  1. 右键单击Windows PowerShell快捷方式并选择以管理员身份运行,以管理员身份启动Windows PowerShell。

  2. 默认情况下, WinRM 服务已配置为手动启动。您必须将启动类型更改为“自动”,并在要使用的每台计算机上启动该服务。在PowerShell提示符下,您可以使用以下命令验证WinRM服务是否正在运行: get-service winrm 如果该服务未运行,请通过 Start-Service winrm

  3. 使其运行
  4. 要配置Windows PowerShell以进行远程处理,请键入以下命令:
  5.   

    启用-PSRemoting -force

    1. 要启用身份验证,您需要将远程计算机添加到WinRM中本地计算机的可信主机列表中。为此,请键入:
    2.   

      winrm s winrm / config / client'@ {TrustedHosts =“RemoteComputer”}'

      1. 通过在远程主机上运行以下命令,验证远程主机上的服务是否正在运行并接受请求:
      2.   

        winrm quickconfig

        此命令分析和配置WinRM服务。

        在您的情况下,您必须在ServerB中执行所有这些操作,因为ServerB必须信任ServerA。

        执行这些操作后,您可以从ServerA运行以下脚本。我在脚本中添加了一些要点供您参考。您可以根据需要更改占位符。

        # Embedding the password in the script.
        # If you do not have a domain creds, then use the username and password directly.
        
        $MyDomain='MyDomain' ;
        $MyClearTextUsername='Username' ;
        $MyClearTextPassword='Password' ;
        $MyUsernameDomain=$MyDomain+'\'+$MyClearTextUsername;
        $SecurePassword=Convertto-SecureString –String $MyClearTextPassword –AsPlainText –force ;
        $MyCreds=New-object System.Management.Automation.PSCredential $MyUsernameDomain,$SecurePassword ;
        
        # Placing the script under a ScriptBlock
        $MyScriptblock={param($appPoolName,$pathback)
        # Since you have mentioned that it is working fine locally, I am not checking this part. Assuming its fine.
        # Defining the functions as Global. So that you can use it anywhere although I am putting in the scriptblock.
        # Make sure the module is present in the remote system. It should be cause you have already mentioned it is working fine when you are running from that system.
                Function fnStartApplicationPool([string]$appPoolName)
                                    {
              import-module WebAdministration
               if((Get-WebAppPoolState $appPoolName).Value -ne 'Started')
               {
                  Start-WebAppPool -Name $appPoolName
               }
                }
                Function fnStopApplicationPool([string]$appPoolName)
                                    {
              import-module WebAdministration
               if((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped')
               {
                  Stop-WebAppPool -Name $appPoolName
               }
                }
                        if ($pathback -eq $false) 
                           { 
                              #Copying Data from Source to Destination
                              copy-Item  -Recurse $backupsrc -Destination $backupdes 
                              write-host "Backup Successful" 
        
                              #Validating the apppool value
                              import-module WebAdministration 
                              if((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped') 
                              {
                                #Stop apppool       
                                Stop-WebAppPool -Name $appPoolName 
                                write-host "AppPool Stopped Successfully"
                              }
                              #Copying Data from Source to Destination
        
                              #Start apppool
                              Start-WebAppPool -Name $appPoolName 
                              write-host "AppPool Started Sucessfully"
                              cd c:\  
                           } 
        
                }
        
        # As you want to Stop the App pool in Server B from Server A.
        # run the script under server A and provide the Server B creds
        
        $result=Invoke-Command -ComputerName 'ServerB' -Credential $MyCreds -ScriptBlock $MyScriptblock -ArgumentList $appPoolName,$pathback ;
        $result ;
        

        如果您对答案感到满意,请随意选择并接受有助于其他人的答案。