Permalänk
Medlem

C# öppna cmd / powershell

Tjena
jo jag håller på att försöka lära mig väldigt basic C#
jag håller på att koda ett program till mig själv som ska hjälpa mig med ny formaterade datorer

just nu fungerar allt som det ska men jag vill kunna avancera lite till att lära mig öppna cmd via en knapp

funktionen ska vara att den öppnar powershell och sedan så skriver den en rad som avinstallerar t.ex minecraft och candycrush mm

här är koden till powershell för att ta bort "SolitaireSolitaire
Microsoft Solitaire Collection: Get-AppxPackage *solitairecollection* | Remove-AppxPackage

men hur ska man få programmet att öppna powershell och så skriver den in koden automatiskt

Tack på förhand mvh

Visa signatur

CPU: i7 9700k GHz |GPU:GTX 2070 ROG |Moderkort: ASUS ROG Strix Z390-F |Kylning: Corsair H115i PRO |RAM: Corsair ddr4 32GB 3000 mhz |SSD:m.2 90 evo plus |OS: windows 10 Pro
Online:| Overwatch(master) | CS:GO | APEX | VR-SPEL | PUBG |
Bredband | Fraktfritt Inet | hemsida| swec bb-koder

Permalänk
Medlem

@Doctor9:
En snabb googling så hittar du ditt svar, t.ex. här eller här

Permalänk
Medlem

Om du bara är ute efter att köra PowerShell-kommandon och inte behöver öppna ett fönster går det att utnyttja System.Management.Automation från PowerShell SDK och skriva någonting liknande

System.Management.Automation.PowerShell .Create() .AddCommand("Get-AppxPackage") .AddParameter("Name", "*solitairecollection*") .AddCommand("Remove-AppxPackage") .Invoke();

Ej testkört.

Permalänk
Medlem
Skrivet av zaibuf:
Skrivet av johho:

/////////////////////////////////////////////////////////////////////////////

jag har testat allt men det fungerar inte.. den hakar upp sig på

"System.Management.Automation.PowerShell"

men jag hittade ett annat sätt att öppna PowerShell med hjälp av denna koden

System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; startInfo.FileName = "powershell.exe"; process.StartInfo = startInfo; process.Start();

powershell startar felfritt utan problem fast jag vet inte hur jag lägger till koder så att den fortsätter köra

Get-AppxPackage *solitairecollection* | Remove-AppxPackage

tack på förhand

##########
edit

jag hittade just nu testar jag "ipconfig" commandet och den funkar men den stänger ner powershell rutan så fort den har skrivit "ipconfig"

System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; startInfo.FileName = "powershell.exe"; startInfo.Arguments = "ipconfig"; process.StartInfo = startInfo; process.Start();

men hur skriver man flera rader ?
tex

ipconfig /release Flushdns ipconfig /renew

Visa signatur

CPU: i7 9700k GHz |GPU:GTX 2070 ROG |Moderkort: ASUS ROG Strix Z390-F |Kylning: Corsair H115i PRO |RAM: Corsair ddr4 32GB 3000 mhz |SSD:m.2 90 evo plus |OS: windows 10 Pro
Online:| Overwatch(master) | CS:GO | APEX | VR-SPEL | PUBG |
Bredband | Fraktfritt Inet | hemsida| swec bb-koder

Permalänk
Medlem

@Doctor9: du har en prop som heter Arguments på ditt starterinfo object. Testa slänga in det där.

ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "powershell.exe"; startInfo.Arguments = "Get-AppxPackage *solitairecollection* | Remove-AppxPackage" startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; startInfo.Verb = "runas"; Process process = new Process(); process.StartInfo = startInfo; process.Start();

Annars råder jag nog dig att googla mer och läsa dokumentationen, finns med 100% säkerhet ett svar till dina problem där ute

Permalänk
Medlem

Tack för allt hehe
jag vart lite snabb på forumet där

hittade en annan kod till mitt problem ifall någon annan kanske söker

System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; startInfo.FileName = "powershell.exe"; startInfo.Arguments = "ipconfig /release"; startInfo.Arguments = "flushdns"; startInfo.Arguments = "ipconfig /renew"; process.StartInfo = startInfo; process.Start();

Visa signatur

CPU: i7 9700k GHz |GPU:GTX 2070 ROG |Moderkort: ASUS ROG Strix Z390-F |Kylning: Corsair H115i PRO |RAM: Corsair ddr4 32GB 3000 mhz |SSD:m.2 90 evo plus |OS: windows 10 Pro
Online:| Overwatch(master) | CS:GO | APEX | VR-SPEL | PUBG |
Bredband | Fraktfritt Inet | hemsida| swec bb-koder

Permalänk
Medlem

@Doctor9: Det ser ut som du skriver över arguments där, jag tippar på att endast den sista raden körs.

Permalänk
Medlem
Skrivet av Dalton Sleeper:

@Doctor9: Det ser ut som du skriver över arguments där, jag tippar på att endast den sista raden körs.

aha, det känns som en bra förklaring..
efter som att internet inte blir ifrån kopplat och att scriptet körs för fort

har du en lösning på detta ?

Visa signatur

CPU: i7 9700k GHz |GPU:GTX 2070 ROG |Moderkort: ASUS ROG Strix Z390-F |Kylning: Corsair H115i PRO |RAM: Corsair ddr4 32GB 3000 mhz |SSD:m.2 90 evo plus |OS: windows 10 Pro
Online:| Overwatch(master) | CS:GO | APEX | VR-SPEL | PUBG |
Bredband | Fraktfritt Inet | hemsida| swec bb-koder

Permalänk
Medlem

@Doctor9: Kanske är smidigare att skapa en bat/ps1 fil innehållande ditt script och skicka in den till cmd/powershell

Permalänk
Medlem

oj, nu blev det överkurs här ?
jag har ingen kunskap om kodning.

men kan man inte kringå detta på något sätt ? så att den kör flera rader ? eller måste man se till att scriptet väntar en viss tid innan nästa linje körs ?

Visa signatur

CPU: i7 9700k GHz |GPU:GTX 2070 ROG |Moderkort: ASUS ROG Strix Z390-F |Kylning: Corsair H115i PRO |RAM: Corsair ddr4 32GB 3000 mhz |SSD:m.2 90 evo plus |OS: windows 10 Pro
Online:| Overwatch(master) | CS:GO | APEX | VR-SPEL | PUBG |
Bredband | Fraktfritt Inet | hemsida| swec bb-koder

Permalänk
Medlem

Jag tänkte mer på att du flyttar dina tre rader in i en fil, typ mittPowershellScript.ps1, och sedan i Arguments så skickar du in -File följt av pathen till denna fil.

typ
startInfo.Arguments = " -File " + "c:\\mittPowershellScript.ps1";

(otestat)

https://docs.microsoft.com/en-us/powershell/scripting/compone...

Tror också att du skulle kunna addera "`r`n" (radbrytning) mellan argumenten annars, åter igen otestat
startInfo.Arguments = "rad1" + "`r`n" + "rad2" + "`r`n" + "rad3";

Permalänk
Medlem

@Doctor9: du kan köra flera commands I powershell genom att separerar dem med semicolon.

https://www.tenforums.com/performance-maintenance/109154-run-...

Permalänk
Medlem

@Anriko: Se där, ännu enklare Jag är mer eller mindre noob på powershell också och har endast använt det till några få saker på jobbet. Förvånad vad mycket man kan åstadkomma med powershell!

Permalänk
Medlem

Litet sidospår:
Om det endast är CMD och Powershell-kommandon som kommer köras från fönstret kan du nästan lika väl bygga fönstret i Powershell också så att allt är samma språk 😀 Man kan bygga traditionella fönster eller med WPF:

https://blogs.technet.microsoft.com/stephap/2012/04/23/buildi...

https://4sysops.com/archives/create-a-gui-for-your-powershell...

Dock, jag har läst att du vill lära dig mer om C# så detta kanske inte är relevant just nu, men kanske bra att veta.
Du kan också göra Powershell-script till applikationer (.exe).

Skickades från m.sweclockers.com

Visa signatur

🟢 Main: Ryzen7 5800X | Strix x470-I | 32GB | RTX2070S | Samsung C49RG9
🔵 unRaid: Ryzen5 2700X | B450M DS3H | 32GB
🟠 Tfn: Google Pixel 7 Lime Green

-:| @ eller citera för svar |:-

Permalänk
Medlem
Skrivet av Doctor9:

jag har testat allt men det fungerar inte.. den hakar upp sig på

"System.Management.Automation.PowerShell"

Har du lagt till en referens till System.Management.Automation?

C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll

Permalänk
Medlem

Rent krasst sett öppnar du runspaces / runfactory (glömt bort exakta termerna nu) och du har ett runspace öppnat kan du börja bygga dina kommandon och sedan exekvera med .Invoke().

Byggde en liten C# app för några år sedan där vi körde viss Exchange-managering via powershell.

På senare tid har jag kommit fram till att det går snabbare att få samma sak utfört i ren powershellkod och vscode.

Vill jag bygga ett REST API brukar jag använda mig av Universal Dashboard och bygga upp allting i native powershellkod.

Byggde en simpel snurra via detta för att låta våra användare återställa bortglömda/utgångna lösenord. Användarens mobilnummer hämtades upp och ett SMS med en kod skickades till användarens mobiltelefon via rest mot vår telefonväxels endpoint. Knappar användaren in rätt kod får dom byta lösenord. Det nya lösenordet hashas och kontrolleras mot havibeenpwned.com och därefter accepteras lösenordsbytet. Allt detta skrevs i enbart powershellkod och togs i produktion under en dag. Bara för att ge exempel på hur ett extremt kraftfullt verktyg powershell idag är.

Även vid större projekt är det inte helt uteslutet att bygga din prototyp via powershell och sedan gå över till andra språk. Sitter som sysadmin över vår windowspark med mera och dom dagar jag behöver lämna min powershellsession (som inte är VSCode eller git) av någon anledning är dagar jag har förlorat

Visa signatur

Antec 900| Corsair HX620W | Core2 Q6600@3.2 | 6GB RAM | GTX260
Server Tirpitz: E4300 | 4GB RAM | 3.3TB HDD | Server 2008 Ent x64
Server Bismark: 2xQuad | 4GB RAM | 1.5TB HDD | ESX 3.5