우리는 C#을 통해 Citrix XenApp Powershell cmdlet을 호출하는 새로운 웹 기반 응용 프로그램을 개발했습니다. 웹 응용 프로그램은 Citrix 팜 (Citrix 팜의 모든 서버에 액세스 할 수 있다고 생각되는 Citrix 서버)에서 호스팅됩니다.이 코드는 Visual Studio IDE에서 실행될 때 출력을 제공합니다. 그러나 IIS에서 가상 디렉터리를 만들고 브라우저를 통해 액세스 할 때.C# Citrix to Powershell
System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper에서 System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate (개체 입력 해시 테이블 errorResults 부울 열거) (AT)에 System.Management.Automation.Runspaces. LocalPipeline.InvokeThreadProc는()
다음은
protected void Page_Load(object sender, EventArgs e)
{
string usrname = "";
string svrname = "";
string appname = "";
string clntnme = "";
string clntip="";
string farm = "";
Runspace rsp = RunspaceFactory.CreateRunspace();
//rsp.ApartmentState = System.Threading.ApartmentState.STA;
//rsp.ThreadOptions = PSThreadOptions.UseCurrentThread;
rsp.Open();
PSSnapInException exp;
rsp.RunspaceConfiguration.AddPSSnapIn("Citrix.XenApp.Commands", out exp);
try
{
PowerShell ps3 = PowerShell.Create().AddCommand("Get-XAFarm");
ps3.Runspace = rsp;
foreach (PSObject pss in ps3.Invoke())
{
farm = pss.Properties["FarmName"].Value.ToString();
}
Response.Write("<DIV align=" + "center" + " style=" + "width:100%;height:100%" + ">" + farm + "<TABLE style=" + "width:100%" + ">");
Response.Write("<TR><TH>User</TH><TH>Server</TH><TH>Application</TH><TH>Address</TH><TH>Client Name</TH></TR>");
PowerShell sessions = PowerShell.Create().AddCommand("Get-XASession").AddParameter("Full").AddCommand("where-object").AddParameter("FilterScript", ScriptBlock.Create("{$_.BrowserName -ne $null }"));
sessions.Runspace = rsp;
foreach (PSObject psr in sessions.Invoke())
{
//IPAddress.Parse(psr.Properties["ClientAddress"].Value.ToString());
usrname = psr.Properties["AccountName"].Value.ToString();
svrname = psr.Properties["ServerName"].Value.ToString();
appname = psr.Properties["BrowserName"].Value.ToString();
clntnme = psr.Properties["ClientName"].Value.ToString();
//if (psr.Properties["ClientAddress"].Value != null)
//{
clntip = psr.Properties["ClientAddress"].Value.ToString();
//}
//clntip = psr.Properties["ClientIPV4"].Value.ToString();
Response.Write("<TR><TD>" + usrname + "</TD><TD>" + svrname + "</TD><TD>" + appname + "</TD><TD>" + clntip + "</TD><TD>" + clntnme + "</TD></TR>");
}
Response.Write("</TABLE>");
}
catch (Exception ex)
{
Response.Write(ex.StackTrace.ToString());
}
finally
{
rsp.Close();
}
}**
어떤 변화가 저를 성공적으로 aspx
페이지에 액세스 할 수 있도록 IIS에서 수행 할 필요가 있으면 알려 주시기 바랍니다 코드를입니다.
나는 그것을 알아 냈습니다. IIS에서 응용 프로그램의 풀 ID를 로컬 시스템으로 변경했으며 현재 작동 중입니다. 도움을 주셔서 감사합니다 –
왜 PowerShell의 여러 인스턴스를 만드나요? 명령 호출간에'PowerShell.Commands.Clear()'를 실행하기 만하면됩니다. 또한 PowerShell v3을 사용하는 경우 DLR을 사용하므로 foreach 루프를 단순화 할 수 있습니다. 'foreach (ps3.Invoke()에서 동적 인 ps) {farm = pss.FarmName; }'. –
감사합니다. 귀하의 관찰에 따라 코드를 변경했습니다. –