Windows 管理
- WindowsWindowsPowerShellRDPSSH
管 Windows 伺服器大多離不開 PowerShell,這頁收的是遠端管理的常用操作:開 RDP 帳號與登入紀錄稽核、schtasks 排程工作、PowerShell 環境設定、搜檔案內容、架 OpenSSH server、使用者與權限。指令以 PowerShell 為主,部分段落是 cmd。RDP 那段的登入稽核,在懷疑帳號被試密碼的時候特別有用。
RDP 帳號與監控
開 RDP 帳號
New-LocalUser -Name "account" -Password (ConvertTo-SecureString "<password>" -AsPlainText -Force) -FullName "account"
Set-LocalUser -Name "account" -PasswordNeverExpires $true
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "account"
監控登入紀錄
- Win + R → eventvwr.msc → Windows 記錄 → 安全性
- 事件 ID:4624 登入成功、4625 登入失敗、4778 RDP 重新連線、4779 RDP 中斷
- 詳細資訊看 Account Name、Logon Type、Source Network Address。
- Logon Type = 10 為 RDP 登入。
| Logon Type | 說明 |
|---|---|
| 2 | 互動式登入(本機) |
| 3 | 網路登入(SMB) |
| 4 | 批次(排程) |
| 5 | 服務登入 |
| 10 | 遠端互動式登入(RDP) ✅ |
排程工作(schtasks)
- 需與腳本、CI 或遠端維護整合時,比純 GUI 好自動化。
查詢排程(/Query)
schtasks /Query /FO LIST /V
/FO LIST 以清單格式輸出;/V 顯示詳細資訊(下次執行時間、狀態、作者等)。不帶 /FO 時預設為 TABLE。
schtasks /Query /TN "<task_name>"
只查詢名為 TaskName 的單一工作;/TN 指定工作名稱。
schtasks /Query /FO LIST /TN "\<folder>\<task_name>"
查詢放在資料夾底下的工作;路徑以 \ 開頭,例如 \Microsoft\Windows\Backup.
輸出範例(/FO LIST 節錄):
TaskName: \<task_name>
Next Run Time: <date_time>
Status: Ready
Author: <hostname>\<username>
Task To Run: <script_path>
建立排程(/Create)
schtasks /Create /TN "<task_name>" /TR "<script_path>" /SC DAILY /ST 02:00 /RU SYSTEM
建立每日 02:00 執行的排程;/TR 為要執行的程式或指令,/SC DAILY 為每日,/ST 開始時間,/RU 執行身分(SYSTEM 或 網域\使用者)。
schtasks /Create /TN "<task_name>" /TR "notepad.exe" /SC ONLOGON /RU "%USERNAME%"
/SC ONLOGON 為使用者登入時觸發;/RU %USERNAME% 以目前使用者身分執行。
schtasks /Create /TN "<task_name>" /TR "<script_path>" /SC ONCE /ST 23:00 /SD <date>
/SC ONCE 只執行一次;/SD 為開始日期(YYYY/MM/DD)。
常用 /SC:MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
修改排程(/Change)
schtasks /Change /TN "<task_name>" /ENABLE
啟用已停用的排程;/DISABLE 則停用。
schtasks /Change /TN "<task_name>" /RU "<domain>\<user>" /RP "<password>"
修改執行身分與密碼;若改為系統帳號可 /RU SYSTEM,不需 /RP。
執行排程(/Run)
schtasks /Run /TN "<task_name>"
立即執行指定排程一次;不影響原有排程時間。
結束工作(/End)
schtasks /End /TN "<task_name>"
強制結束該排程目前正在執行的執行個體;若工作未在跑則無效。
刪除排程(/Delete)
schtasks /Delete /TN "<task_name>" /F
刪除名為 <task_name> 的排程;/F 不提示確認。
schtasks /Delete /TN "\<folder>\<task_name>" /F
刪除資料夾底下的工作;路徑需與建立或查詢時一致。
匯出/匯入(搭配 XML)
工作排程器可匯出工作為 XML,再於命令列匯入:
schtasks /Create /TN "<task_name>" /XML "<xml_path>" /F
/F 覆蓋同名工作;XML 內已含觸發條件與動作,不需再給 /TR、/SC。
速查
| 用途 | 參數 | 說明 |
|---|---|---|
| 查詢 | /Query | 列出或查單一工作 |
| 建立 | /Create | 需 /TN、/TR、/SC |
| 修改 | /Change | 啟用/停用、改帳號 |
| 立即執行 | /Run | 觸發一次 |
| 結束 | /End | 結束執行中個體 |
| 刪除 | /Delete | 常加 /F 免確認 |
執行 schtasks /? 可看完整參數;需管理員權限時請以管理員身分開啟 CMD 或 PowerShell。
PowerShell 環境
語法檢查
Get-Command -Syntax "<script_path>"
查看 PowerShell 版本
$PSVersionTable
查看核心數
Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
| 項目 | 說明 |
|---|---|
| NumberOfCores | 實體核心數 |
| NumberOfLogicalProcessors | 邏輯處理器數(含 Hyper-Threading) |
服務與 Port
Get-Service | Where-Object { $_.Name -like "*<keyword>*" }
Restart-Service "<service_name>"
Get-Service | Where-Object { $_.Name -like "*<keyword>*" }
Restart-Service "<service_name>" -Force
tasklist /fi "PID eq <pid>"
Port
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, @{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess).Name}}
netstat -ano | Where-Object { $_ -match "LISTENING" }
netstat -an | Select-String ":<port>"
Windows Server 規範:資料夾與 PowerShell 命名
- 資料夾:空格可、有意義名稱、加日期或版本號。Applications 放應用程式,再一層資料夾包住(如
app_path)。 - 腳本:PascalCase、Verb-Noun.ps1、核准動詞(Get-DiskInfo、Start-Backup)。
參數規範(PascalCase)
param(
[string]$ComputerName,
[string]$LogPath,
[int]$MaxRetryCount
)
執行對話方塊 (Win + R)
- 系統:msconfig、sysdm.cpl、control、appwiz.cpl、desk.cpl、intl.cpl、timedate.cpl
- 網路:ncpa.cpl、firewall.cpl、inetcpl.cpl
- 工具:cmd、powershell、regedit、msinfo32、dxdiag、eventvwr、devmgmt.msc、diskmgmt.msc、services.msc
- 資料夾:explorer、%appdata%、%temp%、%userprofile%、%systemroot%
- 實用:calc、notepad、mspaint、osk、magnify、charmap
配置環境變數
set PATH=%PATH%;<path>
setx /M PATH "%PATH%;<path>"
echo %PATH%
set:僅當前視窗、暫時、不需管理員。setx /M:永久、需重新開視窗、需管理員。
刪除環境變數
透過 GUI:Win + R → sysdm.cpl → 進階 → 環境變數 → 系統變數 Path → 編輯 → 刪除該項。
查看核心數(CMD)
wmic cpu get NumberOfCores,NumberOfLogicalProcessors
搜尋檔案內容
用字串找檔案
Get-ChildItem -Recurse -File |
Select-String "<search_string>"
限定檔案類型
Get-ChildItem -Recurse -File -Filter *.html |
Select-String "<search_string>"
OpenSSH 伺服器
- 建立 user
- 在
C:\ProgramData\ssh\sshd_config加PasswordAuthentication yes,底下加:
AllowUsers <username>
Match User <username>
PasswordAuthentication yes
- 重開 ssh
Restart-Service sshd
- 測試
ssh <username>@<host> -p <port>
使用者與權限
LocalUser
Get-LocalUser
Get-LocalGroup
New-LocalUser "<username>" -Password (ConvertTo-SecureString "<password>" -AsPlainText -Force) -FullName "<FullName>" -Description "<Description>"
Set-LocalUser -Name "<username>" -PasswordNeverExpires $true
Add-LocalGroupMember -Group "<groupname>" -Member "<username>"
Get-LocalUser -Name "<username>" | Select-Object *
Remove-LocalUser -Name "<username>"
Remove-Item -Path "C:\Users\<username>" -Recurse -Force
Set-LocalUser -Name "<username>" -Password (ConvertTo-SecureString "<new_password>" -AsPlainText -Force)
群組與權限(net / icacls)
net localgroup <groupname> <username> /add
net localgroup "Remote Desktop Users" <username> /add
icacls "<path>"
icacls "<path>" /inheritance:r
icacls "<path>" /grant "BUILTIN\Administrators:(OI)(CI)(F)"
icacls "<path>" /remove <username>
取得擁有權與刪除資料夾
takeown /f "C:\Users\<username>\.ssh" /r /d y
takeown /f "C:\Users\<username>" /r /d y
icacls "C:\Users\<username>" /grant administrators:F /t
Remove-Item -Path "C:\Users\<username>" -Recurse -Force
RDP 帳號範例
New-LocalUser -Name "<rdp_username>" -Password (ConvertTo-SecureString "<password>" -AsPlainText -Force) -FullName "<rdp_username>"
Set-LocalUser -Name "<rdp_username>" -PasswordNeverExpires $true
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "<rdp_username>"