我有一个 Powershell 脚本,当它复制到本地远程服务器并使用 PSExec 远程执行时,它可以正确运行并执行我需要它执行的操作。我试图调整相同的脚本以便能够远程运行,而不依赖于使用 PSExec 远程复制和执行的脚本。它是让 Citrix XenApp 服务器加入其场的命令。
# Establish Variables
$ZoneName = "MyZone"
$OdbcUserName = "MyCitrixUserAcct"
$OdbcPassword = "MyPassword"
$LicenseServerName = "mylicenseserver.company.com"
$XAConfigConsoleExe = "C:\Progra~2\Citrix\XenApp\ServerConfig\XenAppConfigConsole.exe"
$Servers = Get-Content -path .\serverlist.txt
ForEach ($Server in $Servers)
{
# Creating mf20.dsn File
if ((Test-Path \\$Server\c$\temp\mf20.dsn) -eq $true)
{
remove-item \\$Server\c$\temp\mf20.dsn
}
add-Content \\$Server\c$\temp\mf20.dsn "[ODBC]"
add-content \\$Server\c$\temp\mf20.dsn "DRIVER=SQL Server"
add-content \\$Server\c$\temp\mf20.dsn "DATABASE=MyDB"
add-content \\$Server\c$\temp\mf20.dsn "APP=Citrix IMA"
add-content \\$Server\c$\temp\mf20.dsn "UID="
add-content \\$Server\c$\temp\mf20.dsn "SERVER=dbserver.company.com,1433"
add-content \\$Server\c$\temp\mf20.dsn "Trusted_Connection=No"
# Setting setup arguments
[Array]$XAArguments = @()
$XAArguments += "/ExecutionMode:Join"
$XAArguments += "/ZoneName:$ZoneName"
$XAArguments += "/ImaWorkerMode:True"
$XAArguments += "/DsnFile:c:\temp\mf20.dsn"
$XAArguments += "/AuthenticationType:Sql"
$XAArguments += "/OdbcUserName:$OdbcUserName"
$XAArguments += "/OdbcPassword:$OdbcPassword"
$XAArguments += "/LicenseServerName:$LicenseServerName"
$XAArguments += "/LicenseServerPort:27000"
$XAArguments += "/LicenseModel:XA"
$XAArguments += "/CustomXMLServicePort:8080"
# running setup with arguments
Invoke-Command -ComputerName $Server {$XAConfigConsoleExe + $XAArguments}
}
我已经尝试了很多不同的排列和组合(即使用-scriptblock,使用pssessions)我通过搜索找到的东西。我知道我的命令行很好,因为如果我将输出write-host $XAConfigConsoleExe $XAArguments
传递给服务器的 Powershell 控制台,它就可以工作。
我确定我遗漏了一些明显的东西。我没有写原始脚本。我不能为论点是如何构建的这样的事情辩护,所以如果有更好(更可靠的方法),那么我在这里所做的事情我对任何想法都持开放态度。
这是我可以使用 PSExec 远程执行的原始脚本的样子:
# Establish Variables
$ZoneName = "MyZone"
$OdbcUserName = "MyCitrixUserAcct"
$OdbcPassword = "MyPassword"
$LicenseServerName = "mylicenseserver.company.com"
$XAConfigConsoleExe = "C:\Program Files (x86)\Citrix\XenApp\ServerConfig\XenAppConfigConsole.exe"
# Creating mf20.dsn File
if ((Test-Path C:\temp\mf20.dsn) -eq $true)
{
remove-item C:\temp\mf20.dsn
}
add-Content C:\temp\mf20.dsn "[ODBC]"
add-content C:\temp\mf20.dsn "DRIVER=SQL Server"
add-content C:\temp\mf20.dsn "DATABASE=MyDB"
add-content C:\temp\mf20.dsn "APP=Citrix IMA"
add-content C:\temp\mf20.dsn "UID="
add-content C:\temp\mf20.dsn "SERVER=mydbserver.company.com,1433"
add-content C:\temp\mf20.dsn "Trusted_Connection=No"
# Setting setup arguments
[Array]$XAArguments = @()
$XAArguments += "/ExecutionMode:Join"
$XAArguments += "/ZoneName:$ZoneName"
$XAArguments += "/ImaWorkerMode:True"
$XAArguments += "/DsnFile:C:\Temp\mf20.dsn"
$XAArguments += "/AuthenticationType:Sql"
$XAArguments += "/OdbcUserName:$OdbcUserName"
$XAArguments += "/OdbcPassword:$OdbcPassword"
$XAArguments += "/LicenseServerName:$LicenseServerName"
$XAArguments += "/LicenseServerPort:27000"
$XAArguments += "/LicenseModel:XA"
$XAArguments += "/CustomXMLServicePort:8080"
# running setup with arguments
& $XAConfigConsoleExe $XAArguments