2012-07-30 38 views
5

Tôi đang trong quá trình chuyển đổi một số tập lệnh VB cũ sang Powershell. Tôi đang cố gắng sử dụng câu lệnh Chuyển đổi để đặt nhiều biến. Điều này có thể xảy ra ở Powershell không? Trong VBS mã của tôi sẽ trông giống như thế này:Tuyên bố chuyển đổi Powershell để đặt nhiều biến số

Select Case ENV 
    Case "DEV" 
     : SRCDRV = "\\Server1" _ 
     : DESTDRV = "\\Server1\Folder1\" 

    Case "TEST" 
     : SRCDRV = "F:" _ 
     : DESTDRV = "\\Server1\Folder2\" 

    Case "PROD" 
     : SRCDRV = "F:" _ 
     : DESTDRV = "\\Server2\Folder2\" 
End Select 

Tôi đã thử một cái gì đó tương tự trong PS, nhưng nó dường như không thiết lập các biến.

switch ($cENV) { 
    DEV { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder1\" 
     break  
    } 
    TEST { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
     break 
    } 
    PROD { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
     break 
    } 
} 

Khi tôi kiểm tra giá trị của DESTDRV hoặc SRCDRV, tôi nhận được thông báo lỗi: Không thể truy xuất biến '$ SRCDRV' vì biến chưa được đặt. Bất kỳ ý tưởng về những gì tôi đang làm sai?

Trả lời

4

Bạn có đặt $ cENV trước không?

Tôi đang chạy mà kịch bản chính xác trên như thế này:

$cENV = "DEV" 
switch ($cENV) { 
    DEV { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder1\" 
    } 
    TEST { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
    } 
    PROD { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
    } 
} 
$SRCDRV 

Và nó trở

\\Server1 
+0

$ cENV có thể có một số giá trị, nếu không ông sẽ nhận được một thông báo lỗi rằng $ cENV không thể là được truy xuất. – dugas

+0

Cảm ơn, bạn nói đúng, nếu tôi đặt $ cENV thành "DEV", nó trả về giá trị chính xác. Tôi không nghĩ sẽ thử thiết lập nó một cách cụ thể. Biến $ cENV được đặt bởi hàm xác định vị trí của tệp tập lệnh. Nếu tôi đặt công tắc, "DEV", "TEST" và "PROD", trong dấu ngoặc kép, nó hoạt động như một nhà vô địch. Cảm ơn rất nhiều về sự giúp đỡ của bạn! – mack

9

Mã của bạn hoạt động khi phát hiện thấy trường hợp cho công tắc. $ cENV có thể có giá trị không khớp với "DEV", "TEST" hoặc "PROD". Thêm trường hợp chuyển đổi mặc định và làm điều gì đó khi bạn không có kết quả phù hợp, ví dụ:

switch ($cENV) { 
    DEV { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder1\" 
    break  
    } 
    TEST { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder2\" 
    break 
    } 
    PROD { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder2\" 
    break 
    } 
    default { 
    throw "No matching environment for `$cENV: $cENV" 
    } 
} 
Các vấn đề liên quan