- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一段时间以来,我一直在使用 Codeplex 的优秀 BizTalk Provider for PowerShell。然而,在我的新公司,构建团队不习惯使用它,所以我需要重写所有方便的配置脚本以不使用它。
我已经重新完成了其中的大部分,但是在寻找如何做以下两件事的示例时遇到了一些问题:
最佳答案
好的,如果其他人需要它们,这里是我完成的 hacky powershell 函数:
function write-WarnMessage([string]$message) {
Write-Host $(Get-Date) $message -ForegroundColor Yellow
}
function write-SucessMessage([string]$message) {
Write-Host $(Get-Date) $message -ForegroundColor Green
}
function write-InfoMessage([string]$message) {
Write-Host $(Get-Date) $message -ForegroundColor Blue -BackgroundColor White
}
function write-ErrorMessage ([string]$message) {
Write-Host $(Get-Date) $message -ForegroundColor Red
}
# Gets the execution directory
function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
function Delete-Bts-Receive-Handler ( [string]$adapter, [string]$hostName )
{
try
{
[System.Management.ManagementObject]$objHandler = get-wmiobject 'MSBTS_ReceiveHandler' -namespace 'root\MicrosoftBizTalkServer' -filter "HostName='$hostName' AND AdapterName='$adapter'"
$objHandler.Delete()
write-SucessMessage "Deleted $adapter receive handler for $hostName"
}
catch [System.Management.Automation.RuntimeException]
{
if ($_.Exception.Message -eq "You cannot call a method on a null-valued expression.")
{
write-WarnMessage "$adapter receive handler for $hostName does not exist"
}
elseif ($_.Exception.Message.IndexOf("Cannot delete a receive handler that is used by") -ne -1)
{
write-WarnMessage "$adapter receive handler for $hostName is in use. Cannot delete."
}
else
{
write-Error "$adapter receive handler for $hostName could not be deleted: $_.Exception.ToString()"
}
}
}
function Delete-Bts-Send-Handler ( [string]$adapter, [string]$hostName )
{
try
{
[System.Management.ManagementObject]$objHandler = get-wmiobject 'MSBTS_SendHandler2' -namespace 'root\MicrosoftBizTalkServer' -filter "HostName='$hostName' AND AdapterName='$adapter'"
$objHandler.Delete()
write-SucessMessage "Deleted $adapter send handler for $hostName"
}
catch [System.Management.Automation.RuntimeException]
{
if ($_.Exception.Message -eq "You cannot call a method on a null-valued expression.")
{
write-WarnMessage "$adapter send handler for $hostName does not exist"
}
elseif ($_.Exception.Message.IndexOf("Cannot delete a send handler that is used by") -ne -1)
{
write-WarnMessage "$adapter send handler for $hostName is in use. Cannot delete."
}
else
{
write-Error "$adapter send handler for $hostName could not be deleted: $_.Exception.ToString()"
}
}
}
function Delete-Bts-Instance( [string]$hostName, [string]$Server )
{
try
{
# Unintall
[System.Management.ManagementObject]$objHostInstance = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_HostInstance").CreateInstance()
$name = "Microsoft BizTalk Server " + $hostName + " " + $Server
$objHostInstance["Name"] = $name
$objHostInstance.Uninstall()
# Unmap
[System.Management.ManagementObject]$objServerHost = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_ServerHost").CreateInstance()
$objServerHost["HostName"] = $hostName
$objServerHost["ServerName"] = $Server
$objServerHost.Unmap()
write-SucessMessage "Deleted host instance for $hostName on $Server"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host instance on server $Server could not be deleted: $_.Exception.ToString()"
}
}
function Stop-Bts-HostInstance ( [string] $HostName, [string] $Server )
{
try
{
$filter = "HostName = '" + $HostName + "' and RunningServer = '" + $Server + "'"
$HostInstance = get-wmiobject "MSBTS_HostInstance" -namespace "root\MicrosoftBizTalkServer" -filter $filter
$HostInstanceState = $HostInstance.GetState().State
write-InfoMessage "Current state of $HostName instance on server $Server : $HostInstanceState (1=Stopped, 2=Start pending, 3=Stop pending, 4=Running, 8=Unknown)"
if ($HostInstanceState -eq 4)
{
$HostInstance.Stop()
$HostInstanceState = $HostInstance.GetState().State
write-SucessMessage "New state of $HostName instance on server $Server: $HostInstanceState (1=Stopped, 2=Start pending, 3=Stop pending, 4=Running, 8=Unknown)"
}
else
{
$HostInstanceState = $HostInstance.GetState().State
write-WarnMessage "Failed to stop host instance $HostName on server $Server because host instance state $HostInstanceState was not the expected value of 4 (running)"
}
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host instance could not be stopped on $Server : $_.Exception.ToString()"
}
}
function Delete-Bts-Host ( [string]$hostName )
{
# TODO: This only works intermittently
try
{
[System.Management.ManagementObject]$objHostSetting = get-wmiobject 'MSBTS_HostSetting' -namespace 'root\MicrosoftBizTalkServer' -filter "HostName='$hostName'"
$objHostSetting.Delete()
write-SucessMessage "Deleted host $hostName"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host could not be deleted: $_.Exception.ToString()"
}
}
# function to create BizTalk host
function Create-Bts-Host(
[string]$hostName,
[int]$hostType,
[string]$ntGroupName,
[bool]$authTrusted,
[bool]$tracking,
[bool]$32BitOnly)
{
try
{
[System.Management.ManagementObject]$objHostSetting = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_HostSetting").CreateInstance()
$objHostSetting["Name"] = $hostName
$objHostSetting["HostType"] = $hostType
$objHostSetting["NTGroupName"] = $NTGroupName
$objHostSetting["AuthTrusted"] = $authTrusted
$objHostSetting["IsHost32BitOnly"] = $32BitOnly
$objHostSetting["HostTracking"] = $tracking
$putOptions = new-Object System.Management.PutOptions
$putOptions.Type = [System.Management.PutType]::CreateOnly;
[Type[]] $targetTypes = New-Object System.Type[] 1
$targetTypes[0] = $putOptions.GetType()
$sysMgmtAssemblyName = "System.Management"
$sysMgmtAssembly = [System.Reflection.Assembly]::LoadWithPartialName($sysMgmtAssemblyName)
$objHostSettingType = $sysMgmtAssembly.GetType("System.Management.ManagementObject")
[Reflection.MethodInfo] $methodInfo = $objHostSettingType.GetMethod("Put", $targetTypes)
$methodInfo.Invoke($objHostSetting, $putOptions)
write-SucessMessage "Host $hostName created"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host could not be created: $_.Exception.ToString()"
}
}
function Update-Bts-Host (
[string]$hostName,
[int]$hostType,
[string]$ntGroupName,
[bool]$authTrusted,
[bool]$tracking,
[bool]$32BitOnly)
{
try
{
[System.Management.ManagementObject]$objHostSetting = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_HostSetting").CreateInstance()
$objHostSetting["Name"] = $hostName
$objHostSetting["HostType"] = $hostType
$objHostSetting["NTGroupName"] = $ntGroupName
$objHostSetting["AuthTrusted"] = $authTrusted
$objHostSetting["IsHost32BitOnly"] = $32BitOnly
$objHostSetting["HostTracking"] = $tracking
$putOptions = new-Object System.Management.PutOptions
$putOptions.Type = [System.Management.PutType]::UpdateOnly; # This tells WMI it's an update.
[Type[]] $targetTypes = New-Object System.Type[] 1
$targetTypes[0] = $putOptions.GetType()
$sysMgmtAssemblyName = "System.Management"
$sysMgmtAssembly = [System.Reflection.Assembly]::LoadWithPartialName($sysMgmtAssemblyName)
$objHostSettingType = $sysMgmtAssembly.GetType("System.Management.ManagementObject")
[Reflection.MethodInfo] $methodInfo = $objHostSettingType.GetMethod("Put", $targetTypes)
$methodInfo.Invoke($objHostSetting, $putOptions)
write-SucessMessage "Host updated"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host could not be updated: $_.Exception.ToString()"
}
}
# function to create BizTalk send adapter handler
function Create-Bts-SendHandler([string]$adapter, [string]$hostName)
{
try
{
[System.Management.ManagementObject]$objSendHandler = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_SendHandler2").CreateInstance()
$objSendHandler["AdapterName"] = $adapter
$objSendHandler["HostName"] = $hostName
$objSendHandler["IsDefault"] = $false
$putOptions = new-Object System.Management.PutOptions
$putOptions.Type = [System.Management.PutType]::CreateOnly;
[Type[]] $targetTypes = New-Object System.Type[] 1
$targetTypes[0] = $putOptions.GetType()
$sysMgmtAssemblyName = "System.Management"
$sysMgmtAssembly = [System.Reflection.Assembly]::LoadWithPartialName($sysMgmtAssemblyName)
$objSendHandlerType = $sysMgmtAssembly.GetType("System.Management.ManagementObject")
[Reflection.MethodInfo] $methodInfo = $objSendHandlerType.GetMethod("Put", $targetTypes)
$methodInfo.Invoke($objSendHandler, $putOptions)
write-SucessMessage "Send handler created for $adapter / $hostName"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "Send handler for $adapter / $hostName could not be created: $_.Exception.ToString()"
}
}
# function to create BizTalk receive adapter handler
function Create-Bts-ReceiveHandler([string]$adapter, [string]$hostName)
{
try
{
[System.Management.ManagementObject]$objReceiveHandler = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_ReceiveHandler").CreateInstance()
$objReceiveHandler["AdapterName"] = $adapter
$objReceiveHandler["HostName"] = $hostName
$putOptions = new-Object System.Management.PutOptions
$putOptions.Type = [System.Management.PutType]::CreateOnly;
[Type[]] $targetTypes = New-Object System.Type[] 1
$targetTypes[0] = $putOptions.GetType()
$sysMgmtAssemblyName = "System.Management"
$sysMgmtAssembly = [System.Reflection.Assembly]::LoadWithPartialName($sysMgmtAssemblyName)
$objReceiveHandlerType = $sysMgmtAssembly.GetType("System.Management.ManagementObject")
[Reflection.MethodInfo] $methodInfo = $objReceiveHandlerType.GetMethod("Put", $targetTypes)
$methodInfo.Invoke($objReceiveHandler, $putOptions)
write-SucessMessage "Receive handler created for $adapter / $hostName"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "Receive handler for $adapter / $hostName could not be created: $_.Exception.ToString()"
}
}
# function to create BizTalk host instance
function Create-Bts-Instance([string]$hostName, [string]$login, [string]$password, [string]$Server)
{
try
{
[System.Management.ManagementObject]$objServerHost = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_ServerHost").CreateInstance()
$objServerHost["HostName"] = $hostName
$objServerHost["ServerName"] = $Server
$objServerHost.Map()
[System.Management.ManagementObject]$objHostInstance = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_HostInstance").CreateInstance()
$name = "Microsoft BizTalk Server " + $hostName + " " + $Server
$objHostInstance["Name"] = $name
$objHostInstance.Install($Login, $Password, $True)
write-SucessMessage "Created host instance for $hostName on $Server"
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host instance on server $Server could not be created: $_.Exception.ToString()"
}
}
function Start-Bts-HostInstance ( [string] $HostName, [string] $Server )
{
try
{
$filter = "HostName = '" + $HostName + "' and RunningServer = '" + $Server + "'"
$HostInstance = get-wmiobject "MSBTS_HostInstance" -namespace "root\MicrosoftBizTalkServer" -filter $filter
$HostInstanceState = $HostInstance.GetState().State
write-InfoMessage "Current state of $HostName instance on server $Server: $HostInstanceState (1=Stopped, 2=Start pending, 3=Stop pending, 4=Running, 8=Unknown)"
if ($HostInstanceState -eq 1)
{
$HostInstance.Start()
$HostInstanceState = $HostInstance.GetState().State
write-SucessMessage "New state of $HostName instance on server $Server: $HostInstanceState (1=Stopped, 2=Start pending, 3=Stop pending, 4=Running, 8=Unknown)"
}
else
{
$HostInstanceState = $HostInstance.GetState().State
write-WarnMessage "Failed to start host instance $HostName on server $Server because host instance state $HostInstanceState was not the expected value of 1 (stopped)"
}
}
catch [System.Management.Automation.RuntimeException]
{
write-Error "$hostName host instance could not be started on $Server : $_.Exception.ToString()"
}
}
function Install-BTSMsi ( [string]$bts_application, [string]$msi_package, [string]$install_env )
{
write-InfoMessage "Installing $msi_package in $bts_application for $install_env"
BTSTask ImportApp /ApplicationName:$bts_application /Package:$msi_package /Overwrite /Environment:$install_env
if ($LASTEXITCODE -ne 0) {
write-ErrorMessage "Failed to Import MSI $msi_package"
}
else
{
write-SucessMessage "Installed $bts_application for $install_env"
}
}
function Remove-BTSApplication ( [string]$appServer, [string]$appDatabase, [string]$appName )
{
write-InfoMessage "Uninstalling Application: $appName "
BTSTask RemoveApp /Server:"$appServer" /ApplicationName:"$appName" /Database:"$appDatabase" #| out-null
if ($LASTEXITCODE -ne 0) {
write-ErrorMessage "Failed to remove $appServer $appName"
}
else
{
write-SucessMessage "Removed $appName from $appServer"
}
}
# Accesses SSO and will require the build user account to belong to the SSO Admins group.
# Also requires Microsoft.BizTalk.ExplorerOM.dll to be loaded.
function StartStop-BTSApplication ( [string]$appServer, [string]$appName, [string]$appCommand )
{
if ( ($appName -eq '') -or ($appName -eq $null) )
{
throw 'you must supply the application name'
}
#write-InfoMessage " Finding Application: $appServer:$appName "
$exp = New-Object Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer
$exp.ConnectionString = Get-BTSConnectionString($appServer)
$app = $exp.Applications[$appName]
if($app -eq $null)
{
if ($appCommand -eq "stop" )
{
write-WarnMessage "WARNING failed to stop $appName"
}
else
{
write-WarnMessage "FAILED to start $appName"
}
}
else
{
switch -wildcard ( $app.Status.ToString() )
{
'Stopped'
{
if ($appCommand -eq "start" ) {
write-InfoMessage "Starting Application: $appName "
$null = $app.Start([Microsoft.BizTalk.ExplorerOM.ApplicationStartOption]::StartAll)
$null = $exp.SaveChanges()
write-SucessMessage " Started Application: $appName "
} else {
write-InfoMessage "Application Already Stopped: $appName "
}
}
'*Started'
{
# includes Started and PartiallyStarted
if ($appCommand -eq "stop" ) {
write-InfoMessage "Stopping Application: $appName "
$null = $app.Stop([Microsoft.BizTalk.ExplorerOM.ApplicationStopOption]::StopAll)
$null = $exp.SaveChanges()
write-SucessMessage " Stopped Application: $appName "
} else {
write-InfoMessage "Application Already Started : $appName "
}
}
'NotApplicable'
{
write-InfoMessage "Application doesn't require $appCommand"
}
default
{
$msg = "Unkown STATUS: " + $app.Status
write-ErrorMessage $msg
}
}
}
}
function Get-BTSConnectionString ( [string] $server )
{
$group = Get-WmiObject MSBTS_GroupSetting -n root\MicrosoftBizTalkServer -computername $server
$grpdb = $group.MgmtDBName
$grpsvr = $group.MgmtDBServerName
[System.String]::Concat("server=", $grpsvr, ";database=", $grpdb, ";Integrated Security=SSPI")
write-InfoMessage " Server: $grpsvr - Database $grpdb"
}
关于PowerShell BizTalk 脚本不使用 PowerShell 的 BizTalk 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5578907/
我正在寻找实现 PowerShell 提供程序 在 电源外壳。 我一直在想,如果我只是定义类型,然后将它们导入我的 session (导入模块),我应该能够让它们可用。 例如,这个 不工作但它沿着我想
我创建的脚本使用了组件,这些组件仅在32位版本的Powershell中可用。 默认情况下,Windows使用Powershell x64执行脚本,这会导致一些错误。 是一种在脚本开头设置值以强制Win
是否可以从 Powershell 中检测它是否是嵌套 shell? 如果我打开 Powershell 或 cmd.exe 窗口,然后输入 powershell 在那里,是否有一个神奇的 $host.s
随着 PowerShell Core 的发布,应用程序在使用托管自动化库 (system.management.automation) 时如何选择调用哪个版本的 Powershell(Powershe
最近,我加入了我企业的 Windows 团队,凭借我的开发人员背景(一般是 Java、.NET 和 Web),我很快就对 PowerShell 产生了兴趣。我可以看到它比普通的旧批处理文件、VB 更有
假设我有一个 powershell 脚本,它在我当前路径的相对路径中包含一个 Powershell 哈希。让我们称之为“name.ps1”,它包含: $names = @{ "bob" = "b
我想为我正在构建的自定义 Powershell Commandlet 使用 SqlServerCmdletSnapin。如果我将以下代码添加到 PSM1 的开头: if ( (Get-PSSnapin
如何调用从 PowerShell 脚本中获取命名参数的 PowerShell 脚本? foo.ps1: param( [Parameter(Mandatory=$true)][String]$a=''
我即将为 Windows 管理员编写一个 PowerShell 脚本,以帮助他们完成与部署 Web 应用程序相关的某些任务。 有什么理由让我应该赞成或排除开发 PowerShell 模块 (.psm1
我的 powershell 模块有一个函数,我希望它返回一个非零退出代码。但是,作为一个模块函数,当我运行 Import-Module 时,它会加载到 powershell 控制台的上下文中。所以,当
我在这个问题上花了最后 4 个小时,非常感谢您提供的任何意见。 我需要使用不同的凭据调用 powershell 脚本并将参数传递给该脚本。 安装 WISEScript 中包装的程序后,此脚本开始收集机
我有一个场景,我需要将 powershell 命令的命令和输出转发到另一个进程以进行日志记录和处理。 我希望这个控制台尽可能接近 powershell,因此不希望将它简单地托管在另一个控制台程序中。
我正在尝试让一个主 PowerShell 脚本运行所有其他脚本,同时等待 30-60 秒以确保完成任务。我尝试过的所有其他操作都不会停止/等待第一个脚本及其进程完成,然后才能同时完成所有其他脚本,并且
我正在编写一个脚本来使用多个 plink (PuTTY) session 作为 Windows 版本的 clustersh。然而,我陷入困境,因为我想从 powershell 打开多个 Powersh
我读了这个答案:How to Open Powershell from Powershell start powershell 这将打开基础的大分辨率 PS 实例。如何打开 PS(x86)? 最佳答案
我很想知道我们是否可以在 Powershell 中做到这一点。 使用 Out-File 命令,我们可以通过管道将其输出写入文件。这样我就可以将我所有的历史命令发送到一个文本文件中。 问题是我可以在每次
我在 about_Pipelines 阅读了有关 PowerShell 中的管道工作原理的信息,并了解到管道一次传送一个对象。 所以,这个 Get-Service | Format-Table -Pr
我正在尝试像这样从 powershell 启动一个进程:- $proc = (start-process $myExe -argumentList '/myArg True' -windowStyle
## To run the script # .\get_status.ps1 -Hostname -Service_Action -Service_Name #$Hostname = "hos
让我们使用 powershell 命令 Write-Host "red text"-Fore red这会在红色前景中显示“红色文本”。 但是,您希望文本以稍微亮一点的方式显示字体颜色,浅红色。 有没有
我是一名优秀的程序员,十分优秀!