PowerShell / PowerShell/PSScriptAnalyzer

Cmdlets that run in current scope (like ForEach-Object) not accounted for by PSUseDeclaredVarsMoreThanAssignments

Đang mở
#1,163 9 bình luận 13 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Area - Engine Area - PSUseDeclaredVarsMoreThanAssignments Issue - Enhancement
Ngôn ngữ chính
C#
Star
2.2k
Fork
414
Merge trung bình
13 giờ 1 phút
Pull request đã merge (30 ngày)
2

Mô tả

Although issue #1031 and #1129 probably have the same cause, I have added a new bug report as it is (afaik) not directly related to the Begin, Process and End function blocks as suggested in there which brings the issue in a different perspective.

Apparently for some cmdlets, PowerShell is invoked in the current scope but that is apparently not respected by the PSScriptAnalyzer.

Steps to reproduce

$Test = $False
1..3 | ForEach-Object {$Test = $True}
$Test

note that the result of the above is $True, meaning that the value of $Test is actually assigned and changed to $True within the ForEach-Object cmdlet.

Expected behavior

No warning.

Actual behavior

RuleName                            Severity     ScriptName Line  Message
--------                            --------     ---------- ----  -------
PSUseDeclaredVarsMoreThanAssignment Warning      Test.ps1   2     The variable 'Test' is assigned but never used.

Environment data

Name                           Value
----                           -----
PSVersion                      5.1.17134.590
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17134.590
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PSScriptAnalyzer.Version:    1.17.1

Will this eventually be resolved?
How can I nicely avoid the incorrect warning in an example like above?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng cách chạy bản tái hiện PowerShell với PSUseDeclaredVarsMoreThanAssignments và xác nhận cảnh báo đối với phép gán ForEach-Object. Theo dõi cách rule xử lý các cmdlet trong scope hiện tại, và coi issue là hoàn tất khi ví dụ không tạo ra cảnh báo nào mà không làm phát sinh hồi quy trong các chẩn đoán thông thường về phép gán không được sử dụng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
csharp, powershell
Lĩnh vực
tooling
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.