I am working on my first powershell script. With this, I want to pass a ServiceController to a function but get an error that I can't solve. The script stops service, zip folder and then starts service.
I get the following error that I can't solve:
Service: Apache24_x86_php56 Running
Set-Service-Status : Cannot process argument transformation on parameter 'svc'. Cannot convert the
"System.Object[]" value of type "System.Object[]" to type "System.ServiceProcess.ServiceController".
At C:\temp\services-change-status.ps1:39 char:26
+ $rv = Set-Service-Status $svc, "Stopped"
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-Service-Status], ParameterBindingArgumentTransformationExceptio
n
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Service-Status
Script:
Add-Type -assembly "system.io.compression.filesystem"
$servicecode = "Apache24_x86_php56"
$servicestatusstart = "Running"
$zipsource = "C:\datafolder"
$zipdestination = "C:\backup\datafolder.zip"
$exitcode = 0
function Set-Service-Status {
param ([System.ServiceProcess.ServiceController]$svc, $status)
Write-Host "Service: $($svc.ServiceName) $status..."
Set-Service -InputObject $svc -Status $status
$svc.WaitForStatus($status, "00:02:00")
$svc.Refresh()
# if service status does not match, return error
if ($svc.Status -ne $status) {
return 1
}
return 0
}
$svcl = Get-Service -Name $servicecode -ErrorAction Stop
if ($svcl.Count -ne 1) {
Write-Host "Invalid service code. $($servicecode)"
exit 1
}
$svc = $svcl[0]
Write-Host "Service: $($svc.ServiceName) $($svc.Status)"
# if service status is Stopped, don't start service at end
if ($svc.Status -eq "Stopped") {
$servicestatusstart = "Stopped"
}
# stop service
$rv = Set-Service-Status $svc, "Stopped"
if ($rv -ne 0) {
Write-Host "Service $($svc.ServiceName) is not Stopped. Status=$($svc.Status)"
exit 2
}
# if zip file exists, delete it
if (Test-Path $zipdestination) {
Remove-Item $zipdestination
}
# zip folder while service stopped
Write-Host "Compressing $($zipsource) to $($zipdestination)..."
[io.compression.zipfile]::CreateFromDirectory($zipsource, $zipdestination)
if (!$?) {
Write-Host "Error compressing folder."
$exitcode = 3
}
# restart service
$rv = Set-Service-Status $svc, $servicestatusstart
if ($rv -ne 0) {
Write-Host "Service $($svc.ServiceName) is not $($servicestatusstart). Status=$($svc.Status)"
$exitcode = 4
}
Write-Host "Service: $($svc.ServiceName) $($svc.Status)"
exit $exitcode