Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Management.Automation;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Text.RegularExpressions;

namespace Microsoft.PowerShell.Commands
{
Expand Down Expand Up @@ -131,7 +132,8 @@ internal static string PlatformName
// only generate the windows user agent once
if(s_windowsUserAgent == null){
// find the version in the windows operating system description
string versionText = OS.Substring(OS.LastIndexOf(" ") +1);
Regex pattern = new Regex(@"\d+(\.\d+)+");
string versionText = pattern.Match(OS).Value;
Version windowsPlatformversion = new Version(versionText);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we trust OSDescription? Maybe add Assert at least?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we can for all the versions of Windows this will run on. What assert did you have in mind?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diagnostics.Assert(versionText != null, "...")

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm it would probably be better to wrap it in a try/catch because if the system was detected as Windows, then returning Windows NT without the version is better than nothing at all.

s_windowsUserAgent = $"Windows NT {windowsPlatformversion.Major}.{windowsPlatformversion.Minor}";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we parse? Maybe just return OS (OSDescription) ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because of the format expected in User-Agents. the OS portion should be Windows NT <Major Version>.<Minor Version> That's not native anywhere in the CoreFX name space, System.Environment.OSVersion.Version reports 6.2 for major/minor on windows 10, but User-Agent expects 10.0. ugh.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please clarify for me what is "the format expected in User-Agents"? My understanding is that the string is sent to a web server as UserAgent string and falls in a web log file so if I see the OSDescription in the log it is useful.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User-Agents have an expected format. The first part, Platform, has a specific format to detect Windows/Linux/macOS. the full OSDescription follows the Platform field. here is the full user-agent strings with this change:

windows 10:

Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.15063; en-US) PowerShell/6.0.0

windows 7

Mozilla/5.0 (Windows NT 6.1; Microsoft Windows 6.1.7601 S; en-US) PowerShell/6.0.0

The change in this PR is for the Windows NT 10.0 and Windows NT 6.1 Platform fields.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@markekraus I think we must merge and fix the bug and I'll open new Issue to discuss User-Agents.

}
Expand Down