2016-08-13 17 views

Trả lời

23

Mã sau xác định biến môi trường FOO, nếu chưa tồn tại.

if (-not (Test-Path env:FOO)) { $env:FOO = 'bar' } 

Lưu ý: biến môi trường mới được xác định này sẽ chỉ tồn tại cho quá trình hiện tại và bất kỳ con sẽ xử lý nó tạo ra (ví dụ, khi bạn bắt đầu một phiên PowerShell mới từ ISE). Cảm ơn, PetSerAl.

Sau đây hầu như đóng góp của Ansgar Wiechers, với một bổ sung bởi Mathias R. Jessen:

Nếu bạn muốn xác định một biến môi trường kiên trì, bạn cần phải sử dụng SetEnvironmentVariable() phương pháp tĩnh của [System.Environment] lớp học:

# user environment 
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'User') 

# system environment (requires admin privileges) 
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'Machine') 

Lưu ý rằng các định nghĩa này có hiệu lực trong tương lai phiên (quy trình), vì vậy để để xác định biến cho hiện quá trình cũng, chạy $env:FOO = 'bar'ngoài, đó là một cách hiệu quả giống như [Environment]::SetEnvironmentVariable('FOO', 'bar', 'Process').

Khi sử dụng [Environment]::SetEnvironmentVariable() với User hay Machine, nhắn WM_SETTINGCHANGE được gửi đến các ứng dụng khác để thông báo cho họ về sự thay đổi (mặc dù vài ứng dụng phản ứng với thông báo như vậy).
Điều này không áp dụng khi nhắm mục tiêu Process (hoặc khi gán cho $env:FOO), bởi vì không có ứng dụng nào khác (quy trình) có thể thấy biến này.

See also.

Các vấn đề liên quan