Điều gì đó thực sự lạ với ngôn ngữ này. Tôi đang cố gắng thực thi một hàm và sử dụng giá trị kết quả của nó làm điều kiện. Đây là mã của tôi:Điều kiện với một cuộc gọi hàm trong PowerShell
function Get-Platform()
{
# Determine current Windows architecture (32/64 bit)
if ([System.Environment]::GetEnvironmentVariable("ProgramFiles(x86)") -ne $null)
{
echo "x64"
return "x64"
}
else
{
echo "x86"
return "x86"
}
}
if (Get-Platform -eq "x64")
{
echo "64 bit platform"
}
if (Get-Platform -eq "x86")
{
echo "32 bit platform"
}
Sản lượng dự kiến là thế này:
x64
64 bit platform
Nhưng sản lượng thực tế là thế này:
64 bit platform
32 bit platform
gì đang xảy ra ở đây? Làm thế nào để sửa cái này? Tôi không thể tìm thấy bất kỳ ví dụ nào trên web sử dụng các chức năng bên trong điều kiện if
. Điều đó có thể xảy ra ở Powershell không? Tôi đang ở trên Windows 7 không có thiết lập đặc biệt, vì vậy tôi có bất kỳ phiên bản PS đi kèm với nó.
Cảm ơn bạn đã giải thích đầy đủ. Sử dụng dấu ngoặc đơn xung quanh tên hàm thực sự có vẻ như gọi hàm, do đó, điều này có vẻ giống như một giải pháp phổ quát cho các vấn đề như vậy. Đơn giản hơn nhiều so với sử dụng tên biến khác cho nó. Tiếng vọng trong hàm (được thay thế bằng Máy chủ ghi để hoạt động) chỉ dành cho mục đích truy tìm. Đây là một kịch bản testcase. Mặc dù bây giờ tôi thấy kết quả sau: "x64", "nền tảng 64 bit", "x64". Cuộc gọi WMI dường như trả về một chuỗi được bản địa hóa, với tôi đó là "64-bit". Kiểm tra khác được sử dụng rộng rãi ở những nơi khác. – ygoe
'OSArchitecture' trả về một chuỗi' "32-Bit" 'hoặc' "64-Bit" ', tùy thuộc vào kiến trúc hệ điều hành, vì vậy bạn phải điều chỉnh các điều kiện cho điều đó. –