asp.netサイトと一緒に動作するPowerShellスクリプトをいくつか作成するように求められました。 しかし、C#と一緒にasp.netサイトは私にとって全く新しい地形です。asp.netサイトのpowershellオブジェクトの値を表示
私は、.ps1スクリプトを実行する方法とテキストボックスに出力を表示する方法を紹介したブログをいくつか見つけました。 これは非常にうまくいっていて、テストスクリプトにパラメータを渡すこともできました。
今、より洗練された「洗練された」UIを得るために出力を少しずつフォーマットしたかったのです。それは私が古いSCCMテストサーバーから$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName "6.6.5.5.4.4"
:私はこのようになりますサピエンスPowerShellのメーカーで迅速かつ汚いWPFフォームを作成しました
2列のレイアウトテーブルです。左側に「静的」テキストのラベルがあり、右側に$ SCCMinfoオブジェクトの実際の値を持つラベルがあります($labelGenusVal.Text = $SCCMinfo.__GENUS
など)
asp.netフォームで同じようにするにはどうすればよいですか?私が見つけることができるのは、1つの要素に完全な出力を表示する方法だけです。
EDIT:
私は私が必要とするすべての値のための私の.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
イムあなたが求めているものをかなり確実ではありません。あなたはどのようにWebサイト上のasp.netフォームにデータを入力するか、aspxフォームを作成するためにpowershellを要求しているのですか? – ArcSet
私はpowershellスクリプト(この場合は '$ SCCMinfo')の結果をasp.netウェブサイトに表示したいと思います。可能であれば、上記のWPFフォームで行ったのと同じ方法です。別名 '$ SCCMinfo'の各値を自分のラベルに表示します。ファズを残して申し訳ありません。あなたがそれらに精通していない場合、物事を説明することは非常に困難です。 – StUffz
既存のASP.net Webサイトまたはpowershellによって生成されたWebサイト? – ArcSet