Stänga av dator över nätverk, CMD/Powershell

Stänga av dator över nätverk, CMD/Powershell

Vad vill jag uppnå:
1: Starta dator 2 när dator 1 startar = wake on lan i schemaläggaren
2: Stänga av dator 2 när dator 1 stängs av

Dator 1
Windows 10 x64
Inget konstigt gjort med denna

Dator 2
Win 7 x64
Brandvägg av
Remote registry och WMI startade
Finns dedikerat lokalt konto och lösenord som är lokal admin

Dessa kopplas ihop med en rak nätverkskabel och fasta ip-adresser
De är inte med i en domän och ej någon arbetsgrupp.

Hur kan jag lättast stänga av dator 2 över nätverket från dator 1?

Har testat CMD med shutdown /s /m \\$datorid$ -- Får typ access denied
Powershell: Stop-Computer -ComputerName -Credentials \\%datornamn%\$användare%
Får först fråga om lösenord, sedan access denied.
psexec är väldigt långsamt, är inte intresserad av det.

Det enda jag kan komma på är att ändra till ip-adress och inte datorid.

@SirMacke:
Det krävs lite mer än vad du har gjort men detta How to Remotely Shutdown or Restart a Windows Computer kan troligtvis visa dig hur man sätter upp det.

För att skapa en credential som du kan använda via ex schedule task efter som jag antar att du är i en workgroup

$secpasswd = ConvertTo-SecureString "Password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("username", $secpasswd)

stop-computer -computername datorx -credentials $mycreds -force -confirm:$false

Skrivet av Belzader:

@SirMacke:
Det krävs lite mer än vad du har gjort men detta How to Remotely Shutdown or Restart a Windows Computer kan troligtvis visa dig hur man sätter upp det.

Satt precis och testade detta i virtualbox och det fungerar:
https://social.technet.microsoft.com/Forums/windows/en-US/4cd...

Det är väl typ samma:

Citat:

CHANGE THE FOLLOWING SETTINGS ON THE REMOTE COMPUTER:

Control Panel, Network and Sharing Center, Change Advanced Sharing settings

"Private" enable "Turn on File and Printer sharing"

Add Registry Key

RUN regedt32.exe

Goto:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Right click and add new DWORD

"LocalAccountTokenFilterPolicy"=dword:00000001

When user name and password are not the same on both computers change the following on the remote computer:

Change Local Security Policy

RUN secpol.msc

Local Security Policy, Security Settings, Local Policies, User Rights Assignment

Add "Everyone" to "Force shutdown from a remote system"

Får testa det live på maskinerna i helgen.

Ovan verkar fungera.
Dock skulle jag vilja ha detta som ett script vad avstängning av dator 1.
gpedit.msc och Shutdown script fungerar inte.
Troligtvis är nätverket bortkopplat tills dess att scriptet körs.
Kan man göra något åt det?

@SirMacke:
Om du bläddar ner till Remote Shutdown via Batch File i länken som jag postade så skrivs det hur man skapar en .bat fil med kommandon för att stänga ner en annan dator på nätverket.
Det går troligtvis inte att få det att köra automatiskt vid avstängning av dator 1 (men går troligtligtvis att köra det automatiskt så att dator 2 startas upp vid typ inloggning på dator 1), så .bat filen måste förmodligen köras manuellt innan avstängning av dator 1 för att stänga ner dator 2.

Jag förstår verkligen inte detta.
Testade med 2 W10-installationer i Virtualbox och det fungerade direkt efter inställningarna i länkarna.
Men mot en fysisk maskin, exakt samma ändringar så får jag bara access denied. (5)

Ah, dum jag är.
I testerna med virtuella maskiner så är det samma konto ju, dator 2 är klon av 1.
Så jag får ställa om så det är samma konton på bägge och testa.

EDIT: Slängde upp 2 maskin i Virtualbox igen och testade och får nu access denied. (5), suck!

EDIT2: Löst i den virtuella miljön genom att stänga av detta:

Ske testa på de fysiska maskinerna när det finns möjlighet.

Edit: fungerar på fysiska maskinerna om bägge är W10.
W10 är rätt tungt på den enkärniga Nuc.
Får se om det går att slimma ner.
Eller fortsätta testa mot W7..

Senast redigerat 2019-11-29 19:03

@SirMacke: Här kommer en väldigt sen tanke
Du kan sätta upp ett script på dator 2 som kör ping med jämna mellanrum. När den har missat x ping så stängs den av. Så slipper du credential-hantering och att dator 1 är ett beroende.

Vet inte om du redan hade något för att starta dator 2 med WoL?! Om inte så bifogar jag ett Powershell-script:

function Send-WOL { <# .SYNOPSIS Send a WOL packet to a broadcast address .PARAMETER mac The MAC address of the device that need to wake up .PARAMETER ip The IP address where the WOL packet will be sent to .EXAMPLE Send-WOL -mac 00:11:22:33:44:55 -ip 192.168.2.100 #> [CmdletBinding()] param( [Parameter(Mandatory=$True,Position=1)] [string]$mac, [string]$ip="255.255.255.255", [int]$port=9 ) $broadcast = [Net.IPAddress]::Parse($ip) $mac=(($mac.replace(":","")).replace("-","")).replace(".","") $target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)} $packet = (,[byte]255 * 6) + ($target * 16) $UDPclient = new-Object System.Net.Sockets.UdpClient $UDPclient.Connect($broadcast,$port) [void]$UDPclient.Send($packet, 102) }

Tack för input.
Jag har idag en fungerande lösning.

Skrivet av GreyWilk:

@SirMacke: Här kommer en väldigt sen tanke
Du kan sätta upp ett script på dator 2 som kör ping med jämna mellanrum. När den har missat x ping så stängs den av. Så slipper du credential-hantering och att dator 1 är ett beroende.

Vet inte om du redan hade något för att starta dator 2 med WoL?! Om inte så bifogar jag ett Powershell-script:

function Send-WOL { <# .SYNOPSIS Send a WOL packet to a broadcast address .PARAMETER mac The MAC address of the device that need to wake up .PARAMETER ip The IP address where the WOL packet will be sent to .EXAMPLE Send-WOL -mac 00:11:22:33:44:55 -ip 192.168.2.100 #> [CmdletBinding()] param( [Parameter(Mandatory=$True,Position=1)] [string]$mac, [string]$ip="255.255.255.255", [int]$port=9 ) $broadcast = [Net.IPAddress]::Parse($ip) $mac=(($mac.replace(":","")).replace("-","")).replace(".","") $target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)} $packet = (,[byte]255 * 6) + ($target * 16) $UDPclient = new-Object System.Net.Sockets.UdpClient $UDPclient.Connect($broadcast,$port) [void]$UDPclient.Send($packet, 102) }

Skickades från m.sweclockers.com

Skrivet av SirMacke:

Tack för input.
Jag har idag en fungerande lösning.

Skickades från m.sweclockers.com

👍👍
Hur ser lösningen ut? Du behöver inte gå in på detaljer men intressant. Även undrar jag om varför du använder en sådan uppsättning?

Cheers!

Skrivet av GreyWilk:

👍👍
Hur ser lösningen ut? Du behöver inte gå in på detaljer men intressant. Även undrar jag om varför du använder en sådan uppsättning?

Cheers!

Kan återkomma hur.
Det är i en skjuthall där remote-datorerna visar skjuttavlor/resultat och sitter undangömda.
Därför är det smidigt att dessa startar och stänger av sig tillsammans med huvudmaskinen.