2016-11-25 50 views
0

我有下面的PowerShell脚本来删除暂停的服务实例。根据创建时间删除暂停的服务实例

Get-WmiObject MSBTS_ServiceInstance -Namespace 'root\MicrosoftBizTalkServer' -Filter 'ServiceStatus=4 OR ServiceStatus=32' | 
    %{ Get-WmiObject MSBTS_ServiceInstance -Namespace 'root\MicrosoftBizTalkServer' -Filter "InstanceID='$($_.InstanceID)'" } | 
    %{ $_.Terminate() } | 
    %{ Out-Null } 

如何在上面的PowerShell脚本中添加“创建时间少于某个值”(假设上周五)?

+0

你有什么试过的?例如更改Filter表达式以包含ActivationTime? – Dijkgraaf

+0

向我们展示您尝试过的以及收到的错误消息。 – Dijkgraaf

回答

1

繁琐的部分按照文档转换ActivationTime,这对于一些原因显示为字符串,代替预期日期时间的: https://msdn.microsoft.com/en-us/library/ee268286%28v=bts.10%29.aspx?f=255&MSPPError=-2147217396

在它有一个去下面删除所有挂起的消息超过5天的从现在开始:

# Now minus 5 days 
$OlderThan = (get-date).AddDays(-5) 

Write-Host "Will look for suspended message(s) older than:"$OlderThan 

# Convert from date to string 
$OlderThan = $OlderThan.ToString("yyyyMMddHHmmss") 

# Get all suspended messages older than value in $OlderThan 
$SuspendedMsgs = Get-WmiObject MSBTS_ServiceInstance -namespace 'root\MicrosoftBizTalkServer' | Where-object {$_.ServiceStatus -eq 4 -or $_.ServiceStatus -eq 32 -and $_.ActivationTime -lt $OlderThan} 

# If any suspended messages matching critiera found 
If($SuspendedMsgs){ 
    # For each suspended message 
    $SuspendedMsgs | ForEach-Object { 
     Write-host "---------" 
     $ConvertedDate = [datetime]::ParseExact($_.ActivationTime.Substring(0,14),'yyyyMMddHHmmss',[Globalization.CultureInfo]::InvariantCulture) 
     Write-host "Suspended message on service name:"$_.ServiceName"from"$ConvertedDate" will be deleted!" 
    } 
    # Start terminating! 
    Write-host "---------" 
    Write-host "Termination started..." 
    $SuspendedMsgs.Terminate() | Out-null 
    Write-host "Termination completed!" 
} else { 
    write-host "No suspended messages found!" 
} 
+0

感谢@christian的帮助!它按预期工作正常。 –