Question about Filter function in PowerShell
- 
 I am trying to automate a script to change the startup type of the Exchange services. 
 I can do it crudely, and it suffices, but I would like to make it better and publish it. The reason is related to KB4072650 updating Hyper-Integration services. It breaks Exchange if the services are running when it applies.My problem is the -Filterfunction. I cannot seem to get it to take multiple parameters when Google seems to tell me that it should.This works. Get-WMIObject win32_service -Filter "name like 'MSExchange%'" | Format-Table Name, StartModeThis does not work. Get-WMIObject win32_service -Filter {name like 'MSExchange%' -Or name like 'HostControllerService'} | Format-Table Name, StartModeI am piping it into Set-Servicein the script, but piping it into the table to test thatGet-WMIObjectis returning what I need.
- 
 I tried wrapping that in various parenthesis to no avail also. 
- 
 I'd run something like this, which works in my cases (well, I used it with Get-Process, but should work the same with Services): Get-Service | Where-Object {($_.Name -like "MSExchange" -or $_.Name -like "HostControllerService")} | blah blah blahIf you can't pipe it right after the filtering, you can store them in variables and that should work. 
- 
 @tim_g I'll play with it more tomorrow. But I specifically cannot use Get-Service as that does not contain the current startup status. Once I got the above working, the next bit I will need is to add a filter on current startup. because I have some services disabled. I don't want them set to manual. and I don't want then set to automatic when I am done either.  
- 
 For reference here is the entire manual method that I am trying to turn into a clean script. Turn things off # CHeck the status of hte Exchange Services Get-WMIObject win32_service -Filter "name like 'MSExchange%'" | Format-Table Name, StartMode # Set all the services to manual startup Get-WMIObject win32_service -Filter "name like 'MSExchange%'" | Set-Service -StartupType manual Set-Service -Name HostControllerService -StartupType manualTurn things back on # Set all of the services back to automatic Get-WMIObject win32_service -Filter "name like 'MSExchange%'" | Set-Service -StartupType automatic Set-Service -Name HostControllerService -StartupType automatic # Set IMAP and SMTP back to disabled Set-Service -Name MSExchangeImap4 -StartupType disabled Set-Service -Name MSExchangeIMAP4BE -StartupType disabled Set-Service -Name MSExchangePop3 -StartupType disabled Set-Service -Name MSExchangePOP3BE -StartupType disabled
- 
 @jaredbusch said in Question about Filter function in PowerShell: But I specifically cannot use Get-Service as that does not contain the current startup status Depends on the OS / version of PowerShell... what you doing this on? Anyways, try yoru filter using my format. 
- 
 Get-Service | Where-Object {($_.Name -like "MSExchange*" -or $_.Name -like "HostControllerService*")} | FT -Property Name,StartTypeGet-Service | Where-Object {($_.Name -like "MSExchange*" -or $_.Name -like "HostControllerService*")} | Set-Service -StartupType Disabled
- 
 And if you really can't use Get-Service because of older PS version: Get-WMIObject win32_service | Where-Object {($_.Name -like "MSExchange*" -or $_.Name -like "HostControllerService*")} | FT -Property Name,StartModeWMI version = StartMode 
 Service version = StartType
- 
 @jaredbusch said in Question about Filter function in PowerShell: because I have some services disabled. I don't want them set to manual. and I don't want then set to automatic when I am done either. Just seen this bit... You can add the ones you have disabled using this added in there at the end: -and $_.Name -ne "MSExchangeImap4"So: Get-WMIObject win32_service | Where-Object {($_.Name -like "MSExchange*" -or $_.Name -like "HostControllerService*" -and $_.Name -ne "MSExchangeImap4" -and $_.Name -ne "MSExchangeIMAP4BE" -and $_.Name -ne "MSExchangePop3" -and $_.Name -ne "MSExchangePOP3BE")} | Set-Service -StartupType AutomaticI'm sure that's enough for you to get the point and change it to fit your needs. 
- 
 A bit outside your specific question; however on my Exchange servers I just disabled the MSExchange ActiveDirectory Topology Service; doing that prevented the rest of the Exchange services from loading and KB40720650 loaded without issue 


