[英]Display values from powershell objects on asp.net site
我被要求創建幾個與asp.net網站一起使用的PowerShell腳本。 但是,asp.net站點和C#一起對我來說是全新的領域。
搜索www我發現一些博客展示了如何運行.ps1腳本以及如何在文本框中顯示輸出。 這工作得很好,而且我還能夠將參數傳遞給測試腳本。
現在,我想對輸出進行更多格式化,以獲得更好,更“復雜”的UI。 我在Sapiens PowerShell Studio中創建了一個快速且骯臟的WPF表單,該表單如下所示:
它正在顯示以下WmiObject的值,這些值是我從舊的SCCM測試服務器中$SCCMinfo = Get-WmiObject -Namespace 'root\\SMS' -Class 'SMS_ProviderLocation' -ComputerName "6.6.5.5.4.4"
這是具有兩列的布局表。 左邊是帶有“靜態”文本的標簽,右邊是帶有$ SCCMinfo對象的實際值的標簽(例如: $labelGenusVal.Text = $SCCMinfo.__GENUS
)
如何使用asp.net表單實現相同目的? 我所能找到的就是如何在一個元素中顯示完整的輸出。
我可以通過在.ps1中為所需的每個值實現寫輸出,然后在aspx.cs中對結果進行索引。
但是我發現這是一個非常丑陋的解決方案。 有沒有直接的方法可以從PowerShell腳本中檢索變量及其值? 我還嘗試了shell.Runspace.SessionStateProxy.PSVariable.GetValue("VarName");
和shell.Runspace.SessionStateProxy.GetVariable("VarName");
但他們總是返回null。
這是我當前的解決方案:
.aspx.cs
using System;
using System.Management.Automation;
namespace WPS_Test2
{
public partial class SCCM_info : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExecuteCode_Click(object sender, EventArgs e)
{
// Clean the Result TextBox
//ResultBox.Text = string.Empty;
// Initialize PowerShell engine
var shell = PowerShell.Create();
string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1";
// Add the script to the PowerShell object
shell.AddCommand(pathToWPS);
// Add some arguments / params
shell.AddParameter("sccm_server", SCCM_server.Text);
// Execute the script
var results = shell.Invoke();
LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text;
var SCCMiGenus = results[0].ToString();
labelGenusVal.Text = SCCMiGenus;
var SCCMiClass = results[1].ToString();
labelClassVal.Text = SCCMiClass;
var SCCMiSuperclass = results[2].ToString();
labelSuperclassVal.Text = SCCMiSuperclass;
var SCCMiDynasty = results[3].ToString();
labelDynastyVal.Text = SCCMiDynasty;
var SCCMiRelpath= results[4].ToString();
labelRelpathVal.Text = SCCMiRelpath;
var SCCMiPropertyCount = results[5].ToString();
labelPropertyCountVal.Text = SCCMiPropertyCount;
var SCCMiDerivation = results[6].ToString();
labelDerivationVal.Text = SCCMiDerivation;
var SCCMiServer = results[7].ToString();
labelServerVal.Text = SCCMiServer;
var SCCMiNamespace = results[8].ToString();
labelNamespaceVal.Text = SCCMiNamespace;
var SCCMiPath = results[9].ToString();
labelPathVal.Text = SCCMiPath;
var SCCMiMachine = results[10].ToString();
labelMachineVal.Text = SCCMiMachine;
var SCCMiNamespacePath = results[11].ToString();
labelNamespacePathVal.Text = SCCMiNamespacePath;
var SCCMiProviderForLocalSite = results[12].ToString();
labelProviderForLocalSiteVal.Text = SCCMiProviderForLocalSite;
var SCCMiSiteCode = results[13].ToString();
labelSiteCodeVal.Text = SCCMiSiteCode;
var SCCMiPSComputerName = results[14].ToString();
labelPSComputerNameVal.Text = SCCMiPSComputerName;
}
}
}
的.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.auto-style1 {
width: 145px;
}
.auto-style2 {
width: 145px;
height: 23px;
}
.auto-style3 {
height: 23px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
SCCM Info</div>
<div>
<table style="width:100%;">
<tr>
<td class="auto-style1">SCCM Server:</td>
<td>
<asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="ExecuteCode_Click" />
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1"> </td>
<td>
<asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">Genus</td>
<td>
<asp:Label ID="labelGenusVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style2">Class</td>
<td class="auto-style3">
<asp:Label ID="labelClassVal" runat="server"></asp:Label>
</td>
<td class="auto-style3"></td>
</tr>
<tr>
<td class="auto-style1">Superclass</td>
<td>
<asp:Label ID="labelSuperclassVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label>
</td>
<td>
<asp:Label ID="labelDynastyVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style2">
<asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label>
</td>
<td class="auto-style3">
<asp:Label ID="labelRelpathVal" runat="server"></asp:Label>
</td>
<td class="auto-style3"></td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label>
</td>
<td>
<asp:Label ID="labelPropertyCountVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label>
</td>
<td>
<asp:Label ID="labelDerivationVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label17" runat="server" Text="Server"></asp:Label>
</td>
<td>
<asp:Label ID="labelServerVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label>
</td>
<td>
<asp:Label ID="labelNamespaceVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label19" runat="server" Text="Path"></asp:Label>
</td>
<td>
<asp:Label ID="labelPathVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label>
</td>
<td>
<asp:Label ID="labelMachineVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label>
</td>
<td>
<asp:Label ID="labelNamespacePathVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label22" runat="server" Text="Provider for loca site"></asp:Label>
</td>
<td>
<asp:Label ID="labelProviderForLocalSiteVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label>
</td>
<td>
<asp:Label ID="labelSiteCodeVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label>
</td>
<td>
<asp:Label ID="labelPSComputerNameVal" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
名為.ps1
param ([string]$sccm_server)
$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server
Write-Output $SCCMinfo.__GENUS
Write-Output $SCCMinfo.__CLASS
# Superclass is NULL in this example, adding a char to display output
# Write-Output $SCCMinfo.__SUPERCLASS
Write-Output "--"
Write-Output $SCCMinfo.__DYNASTY
Write-Output $SCCMinfo.__RELPATH
Write-Output $SCCMinfo.__PROPERTY_COUNT
# Derivation is {} in this example, adding a char to display output
# Write-Output $SCCMinfo.__DERIVATION
Write-Output "--"
Write-Output $SCCMinfo.__SERVER
Write-Output $SCCMinfo.__NAMESPACE
Write-Output $SCCMinfo.__PATH
Write-Output $SCCMinfo.Machine
Write-Output $SCCMinfo.NamespacePath
Write-Output $SCCMinfo.ProviderForLocalSite
Write-Output $SCCMinfo.SiteCode
Write-Output $SCCMinfo.PSComputerName
我終於能夠實現一個適當的解決方案。 如果您知道如何的話,這很簡單。
我為標簽使用了與結果相同的ID。成員名稱並使用額外的if語句遍歷它們,以將其文本設置為適當的值(如果不為null)。 在.ps1中,我只是返回所需的var(在這種情況下,只有$SCCMinfo
)
如果有更好的解決方案,我歡迎您提出建議。 畢竟我還在學習。
全部在一起:
名為.ps1
param ([string]$sccm_server)
$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server
return $SCCMinfo
.aspx.cs
using System;
using System.Management.Automation;
using System.Web.UI.WebControls;
namespace WPS_Test2
{
public partial class SCCM_info : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExecuteCode_Click(object sender, EventArgs e)
{
// Initialize PowerShell engine
var shell = PowerShell.Create();
// Attention: No not use spaces!!! Script may cause problems or wont work at all.
string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1";
// Add the script to the PowerShell object
shell.AddCommand(pathToWPS);
// Add some arguments / params
shell.AddParameter("sccm_server", SCCM_server.Text);
// Execute the script
var results = shell.Invoke();
LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text;
foreach (var name in results[0].Members)
{
if (FindControl("lbl" + name.Name) != null)
{
// Find label with the same name as the current property and display the value
// Encode the string in HTML (prevent security issue with 'dangerous' caracters like < >
if (name.Value != null)
{
(FindControl("lbl" + name.Name) as Label).Text = Server.HtmlEncode(name.Value.ToString());
}
}
}
}
}
}
的.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.auto-style1 {
width: 145px;
}
.auto-style2 {
width: 145px;
height: 23px;
}
.auto-style3 {
height: 23px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
SCCM Info</div>
<div>
<table style="width:100%;">
<tr>
<td class="auto-style1">SCCM Server:</td>
<td>
<asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="ExecuteCode_Click" />
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1"> </td>
<td>
<asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">Genus</td>
<td>
<asp:Label ID="lbl__GENUS" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style2">Class</td>
<td class="auto-style3">
<asp:Label ID="lbl__CLASS" runat="server"></asp:Label>
</td>
<td class="auto-style3"></td>
</tr>
<tr>
<td class="auto-style1">Superclass</td>
<td>
<asp:Label ID="lbl__SUPERCLASS" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__DYNASTY" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style2">
<asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label>
</td>
<td class="auto-style3">
<asp:Label ID="lbl__RELPATH" runat="server"></asp:Label>
</td>
<td class="auto-style3"></td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__PROPERTY_COUNT" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__DERIVATION" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label17" runat="server" Text="Server"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__SERVER" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__NAMESPACE" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label19" runat="server" Text="Path"></asp:Label>
</td>
<td>
<asp:Label ID="lbl__PATH" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label>
</td>
<td>
<asp:Label ID="lblMachine" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label>
</td>
<td>
<asp:Label ID="lblNamespacePath" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style2">
<asp:Label ID="Label22" runat="server" Text="Provider for local site"></asp:Label>
</td>
<td class="auto-style3">
<asp:Label ID="lblProviderForLocalSite" runat="server"></asp:Label>
</td>
<td class="auto-style3"></td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label>
</td>
<td>
<asp:Label ID="lblSiteCode" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label>
</td>
<td>
<asp:Label ID="lblPSComputerName" runat="server"></asp:Label>
</td>
<td> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.