Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

ASP.net Powershell Script ausführen

Frage Entwicklung Webentwicklung

Mitglied: markthom87

markthom87 (Level 1) - Jetzt verbinden

03.03.2014 um 13:47 Uhr, 3810 Aufrufe, 10 Kommentare

Hallo,

Ich habe ein Powershell Script geschrieben, was einen AD User erstellt, mit einem Random Passwort versieht und dann eine email an den beantrager zusendet (soll).
Möchte folgendes Scenario realisieren, der User geht auf eine Seite im Intranet und beantragt per "Button" Klick, die erstellung des AD Users. Es wird im hintergrund jede beantragung gelogt.

Nun hab ich aber das Problem, das mit dem Button klick einfach nichts passiert. Ich vermue, das dem IIS7 einfach die passenden Berechtigungen fehlen, für die ausführung.
Wäre für ein Tipp, der das Problem beseitigt, sehr dankbar.

Gruß
Mitglied: colinardo
03.03.2014, aktualisiert 04.03.2014
Hi,
Schau dazu hier mal rein:
http://www.administrator.de/forum/powershell-skripte-über-url-f&uu ...

und für die Berechtigungen hier:
http://forums.asp.net/t/1552331.aspx?How+to+create+a+flipcart+like+pane ...

Der Account mit dem der IIS ausgeführt wird muss entweder selber das Recht haben Konten zu erstellen, oder besser du legst einen AppPool im IIS an, der mit einem User-Account läuft der die entsprechenden Rechte für dein Script besitzt:
http://forums.asp.net/t/1552331.aspx?How+to+create+a+flipcart+like+pane ...

Erstellen eines benutzerdefinierten Anwendungspools im IIS
Dazu gehst du in den IIS unter Anwendungspools > Anwendungspool hinzufügen und gibst Ihm einen Namen. Dann wählst du im Kontextmenü des Pools Erweiterte Einstellungen und im Dialog gibst du unter Identität einen Benutzeraccount inklusive Passwort an der deine benötigten Rechte besitzt. Dann legst du noch die Option Benutzerprofil laden auf True fest. Dann schließt du den Dialog mit OK. Jetzt musst du den Pool einer neuen Anwendung im IIS zuweisen. Dazu öffnest du das Kontextmenü deiner Website und wählst Anwendung hinzufügen. Dort vergibst du einen Alias-Namen unter dem das Verzeichnis später erreichbar ist und wählst den physikalischen Pfad zu deinen ASP.Net Seiten aus; und jetzt wichtig, musst du deinen gerade erstellen Anwendungspool auswählen.
Jetzt laufen die Seiten unter diesem Alias im Kontext des vorhin ausgewählten Useraccounts, und dein Script sollte problemlos durchlaufen.

Grüße Uwe
Bitte warten ..
Mitglied: markthom87
04.03.2014 um 15:24 Uhr
Vielen Dank Uwe, du hilfst mir sehr!

Mittlerweile glaube ich das es an meinem Script oder dem Aufruf liegt.
hab zwar den aufruf bei dir übernommen, aber es geht einfach nicht.

Hier mal meine VB datei
Imports System.Collections.ObjectModel
Imports System.Management.Automation
Imports System.Management.Automation.Runspaces
Imports System.Text
Imports System.IO
Imports System.Diagnostics
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Request.QueryString("action") <> "" Then
Dim action As String = Request.QueryString("action")
Select Case action
Case "deleteCache"
Dim newproc As Process
newproc = Process.Start("powershell.exe", "-NonInteractive -File ""C:\powershellASP\Scripts\testadmin.ps1""")
newproc.WaitForExit()
Response.Write("Script '" & action & "' wurde ausgeführt")
End Select
End If
End Sub
End Class

Und hier mein Script

  1. testadmin.ps1

  1. Import the Active Directory Module for Powershell
import-module ac*


## Build String AccountExpirationDate
[int]$_hour = (Get-Date).Hour + 1
[string]$_hour = "{0:D2}" -f $_hour
[string]$_exMin = "{0:D2}" -f (Get-Date).Minute
[string]$_exDay = "{0:D2}" -f (Get-Date).Day
[string]$_exMonth = "{0:D2}" -f (Get-Date).Month
[string]$_exYear = "{0:D2}" -f (Get-Date).Year
[string]$_exDate = $_exYear + "-" + $_exMonth + "-" + $_exDay + "T" + $_hour + ":" + $_exMin + ":00.0000000"

## Length of Random User&Password String
[int]$Length = 10
## Set the chars who used for Creating Strings
$set = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789".ToCharArray()
## Create Random Admin User Login Name
[string]$_logonName = ""
for ($x = 0; $x -lt $Length; $x++) {
$_logonName += $set | Get-Random
}
## Create Random Admin User Password
[string]$_logonPW = ""
for ($x = 0; $x -lt $Length; $x++) {
$_logonPW += $set | Get-Random
}
## Convert _logonPW to a SecureString
$_secure = ConvertTo-SecureString -String $_logonPW -AsPlainText -Force
## Build PrincipalName for loginName
$_principalName = $_logonName + "@testdomaene.net"
## Create AD User
New-ADUser -Name $_logonName -UserPrincipalName $_principalName -DisplayName "AdminRequest" -AccountExpirationDate $_exDate -AccountPassword $_secure
Get-ADUser $_logonName | Move-ADObject -TargetPath 'OU=AdminRequest,DC=testdomaene,DC=net'
Add-ADGroupMember -Identity "Local admins" -Member $_logonName
Set-ADUser -Identity $_logonName -Enabled 1

<## Get Information about AccountExpirationDate
Get-ADUser -Properties AccountExpirationDate -Identity $_logonName
#>
## MailMessage Configuration and Body
$SMTPServer = "smtp.testdomaene.net"
$From = "AdminRequest@testdomaene.net"
$To = "tuser@testdomaene.net"
$Subject = "Your Admin Request"
$Body = @"

Login : $_logonName
Password : $_logonPW
Account Expiration : $_exDate
"@

Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body -SmtpServer $SMTPServer -encoding ([System.Text.Encoding]::UTF8)
Bitte warten ..
Mitglied: colinardo
04.03.2014, aktualisiert um 15:34 Uhr
Kein Wunder wenn du den Code so einfach kopierst, denn in dem Code war eine Abfrage eines URL-Parameters eingebaut !!! Diese musst du natürlich rausnehmen...
und lege wie oben beschrieben den AppPool mit einem Admin-User an!
Bitte warten ..
Mitglied: markthom87
04.03.2014 um 15:39 Uhr
ich weiß das ich das powershell script mit

default.aspx?action=deleteCache aufrufe

Der AppPool ist mit einem Administrator angelegt. so wie du es oben, sehr gut beschrieben hast.
Kann ich die identity auch über die Domäne machen? Also testdomaene\Administrator?
Bitte warten ..
Mitglied: colinardo
04.03.2014, aktualisiert um 16:01 Uhr
Zitat von markthom87:

ich weiß das ich das powershell script mit
sorry das war mir noch nicht klar
default.aspx?action=deleteCache aufrufe
auch über den benutzerdefinierten Alias-Pfad deiner Anwendung aufgerufen ?
Der AppPool ist mit einem Administrator angelegt. so wie du es oben, sehr gut beschrieben hast.
Kann ich die identity auch über die Domäne machen? Also testdomaene\Administrator?
Normalerweise ja. Setze in den Eigenschaften des App-Pools auch noch die Option Benutzerprofil laden das hatte ich vergessen.

Hier geht es testweise einwandfrei.

und bau in dein Script zu Debug-Zwecken mal eine Zeile ein die dir den aktuellen User im Powershell-Script in eine Datei schreibt:
echo $env:Username | out-file "C:\powershell_user.txt"
so kannst du überprüfen mit welchem Account das Script ausgeführt wird.
Bitte warten ..
Mitglied: markthom87
04.03.2014, aktualisiert um 16:38 Uhr
Hmm,

Der Fehler scheint irgendwo anders zu liegen. Meine App heißt "testasp" also ist der aufruf komplett wie folgt
http://localhost:1337/testasp/default.aspx?action=deleteCache

Die Seite gibt mir aus, dass das VB-Script gelaufen ist. Dadurch das dort steht Script 'deleteCache' wurde ausgeführt.
Aber ich hab das Gefühl der Fehler liegt wo anders.

WEIL! ändere ich im vb-script das ausführ Kommando also "deleteCache" auf "adminCreate" funktioniert das Script nicht mehr.
Bekomme auch keine Rückmeldung mehr. Gebe ich allerdings weiterhin, das "deleteCache" ein spult er immer das selbe runter.

Kann es also sein, das der Browser vielleicht noch chached? Obwohl ich den gelöscht habe?
Bitte warten ..
Mitglied: colinardo
04.03.2014, aktualisiert um 16:44 Uhr
Zitat von markthom87:

Hmm,

Der Fehler scheint irgendwo anders zu liegen. Meine App heißt "testasp" also ist der aufruf komplett wie folgt
http://localhost:1337/testasp/default.aspx?action=deleteCache

Die Seite gibt mir aus, dass das VB-Script gelaufen ist. Dadurch das dort steht Script 'deleteCache' wurde
ausgeführt.
Aber ich hab das Gefühl der Fehler liegt wo anders.

WEIL! ändere ich im vb-script das ausführ Kommando also "deleteCache" auf "adminCreate" funktioniert
das Script nicht mehr.
Bekomme auch keine Rückmeldung mehr. Gebe ich allerdings weiterhin, das "deleteCache" ein spult er immer das selbe
runter.

Kann es also sein, das der Browser vielleicht noch chached? Obwohl ich den gelöscht habe?
das hat mit Caching nichts zu tun, die Abfrage kannst du komplett rauswerfen das war nur für den Anwendungsfall im anderen Thread relevant, die Namen habe nichts mit dem Browsercaching zu tun !!

Das hier reicht zur Ausführung:
01.
Imports System.Diagnostics 
02.
Partial Class _Default 
03.
    Inherits System.Web.UI.Page 
04.
    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
05.
          Dim newproc As Process 
06.
          newproc = Process.Start("powershell.exe", "-NonInteractive -File ""C:\powershellASP\Scripts\testadmin.ps1""") 
07.
          newproc.WaitForExit() 
08.
          Response.Write("Script '" & action & "' wurde ausgeführt") 
09.
    End Sub 
10.
End Class
ohne jetzt wirklich zu prüfen ob es tatsächlich richtig durchgelaufen ist....
Bitte warten ..
Mitglied: markthom87
05.03.2014 um 08:32 Uhr
Ich bin vermutlich falsch Verstanden worden.

Aber die Script änderung ist eine sehr gute möglichkeit um zu Demonstrieren was ich meine.

Die Ausgabe "Script ... wurde ausgeführt" erscheint auch nach der änderung erst wenn ich die URL mit anhang
default.aspx?action=deleteCache
eintippe.

Wenn ich ohne "action" eingebe erscheint überhaupt keine Ausgabe. Daher vermute ich das hier irgendwas falsch gecached wird.
Hab es auch mit dem Restart vom IIS probiert usw. Hoffe konnte den Fehler verständlich rüber bringen.
Bitte warten ..
Mitglied: markthom87
12.03.2014 um 08:32 Uhr
DER IIS Server aktualisiert einfach nicht die Daten. Das merkt man schon daran, das wenn ich nen anderes Template hochladen, das er immer noch das alte anzeigt. Kann mir nicht vorstellen, dass das so richtig ist und da überhaupt richtig gecached wird.

Keine Idee, was daran vielleicht falsch läuft?
Bitte warten ..
Mitglied: colinardo
12.03.2014 um 08:42 Uhr
Für Entwicklungszwecke:
http://forums.iis.net/t/959070.aspx?How+do+you+disable+caching+in+IIS+

Das ist aber nicht Thema hier...mach dafür einen neuen Thread auf...Danke.

Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(5)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (19)

Frage von SarekHL zum Thema LAN, WAN, Wireless ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...