ปัญหาหนึ่งนำไปสู่ปัญหาอื่น! ความช่วยเหลือผู้ใช้เพียงแก้ไขปัญหาหนึ่งซึ่งนำไปสู่ปัญหาอื่นเมื่อฉันยังทำงานกับสคริปต์นี้ต่อไป สคริปต์ของฉันเรียกใช้การตรวจสอบเพื่อดูว่าผู้ใช้ปัจจุบันเป็นผู้ดูแลระบบดังนี้:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" + $myinvocation.mycommand.definition + "'" + $loc
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
อาร์กิวเมนต์สำหรับ $ loc คือพารามิเตอร์ที่ แต่เดิมผ่านไฟล์แบตช์ที่ดังต่อไปนี้:
@setlocal enableextensions
@cd /d "%~dp0"
SET current="%~dp0
START /WAIT powershell.exe -ExecutionPolicy Bypass -File "JavaInstall.ps1" -loc %current%
ที่ด้านบนของไฟล์ Powershell เรามี:
param(
[string]$loc
)
งานนี้ภายใต้เงื่อนไขสองประการ:
1) ผู้ใช้เป็นผู้ดูแลระบบอยู่แล้ว
2) โฟลเดอร์ที่เรียกใช้จากจุดใด ๆ ในการสำรวจจะไม่มีที่ว่าง
เมื่อสิ่งนี้ถูกเรียกใช้จากโฟลเดอร์เช่น: C: \ Users \ User \ Desktop \ Java การทดสอบล้มเหลวโดยฉับพลัน ถ้าฉันเขียน - โฮสต์ระหว่างทางฉันจะเห็นว่าตัวแปร $ loc นั้นถูกต้องจนกระทั่งหลังจากระดับความสูง หลังจากยกระดับสิ่งใด ๆ ก็ตามหลังจากพื้นที่หายไป ถ้าฉันเรียกใช้สิ่งนี้โดยตรงในฐานะผู้ดูแลระบบแน่นอนว่ามันผ่านการยกระดับและทำงานได้แม้มีช่องว่างในโฟลเดอร์ แต่ฉันไม่ต้องการให้คลิกขวาเรียกใช้เป็นสถานการณ์สมมติ ความคิดใด ๆ ที่อาจทำให้ข้อความหายไปหลังจากช่องว่างระหว่างการยกระดับ
%current%
ด้วย (ในSTART
บรรทัดแบทช์)
SET current="%~dp0