CLI: Add system command (#40438)
David Bennett committed
May 11, 2026 at 11:22 UTC
bf3a2ef5ee00bd7d902cbf070c5fd272d2ded36e
9 files changed
+161
-55
localization/strings/en-US/Resources.resw
+6
@@ -2461,6 +2461,12 @@ For privacy information about this product please visit https://aka.ms/privacy.<
2461
<data name="WSLCCLI_RegistryCommandLongDesc" xml:space="preserve">
2462
<value>Manage registry credentials, including logging in and out of container registries.</value>
2463
</data>
2464
+ <data name="WSLCCLI_SystemCommandDesc" xml:space="preserve">
2465
+ <value>System-level commands</value>
2466
+ </data>
2467
+ <data name="WSLCCLI_SystemCommandLongDesc" xml:space="preserve">
2468
+ <value>System-level management commands.</value>
2469
+ </data>
2470
<data name="WSLCCLI_ImageTagDesc" xml:space="preserve">
2471
<value>Tag an image.</value>
2472
</data>
src/windows/wslc/commands/RootCommand.cpp
+2
-2
@@ -17,8 +17,8 @@ Abstract:
17
#include "ContainerCommand.h"
18
#include "ImageCommand.h"
19
#include "RegistryCommand.h"
20
-#include "SessionCommand.h"
20
#include "SettingsCommand.h"
21
+#include "SystemCommand.h"
22
#include "InspectCommand.h"
23
#include "VersionCommand.h"
24
#include "VolumeCommand.h"
@@ -33,8 +33,8 @@ std::vector<std::unique_ptr<Command>> RootCommand::GetCommands() const
33
commands.push_back(std::make_unique<ContainerCommand>(FullName()));
34
commands.push_back(std::make_unique<ImageCommand>(FullName()));
35
commands.push_back(std::make_unique<RegistryCommand>(FullName()));
36
- commands.push_back(std::make_unique<SessionCommand>(FullName()));
36
commands.push_back(std::make_unique<SettingsCommand>(FullName()));
37
+ commands.push_back(std::make_unique<SystemCommand>(FullName()));
38
commands.push_back(std::make_unique<VolumeCommand>(FullName()));
39
commands.push_back(std::make_unique<ContainerAttachCommand>(FullName()));
40
commands.push_back(std::make_unique<ImageBuildCommand>(FullName()));
src/windows/wslc/commands/SystemCommand.cpp
new
+48
@@ -0,0 +1,48 @@
1
+/*++
2
+
3
+Copyright (c) Microsoft. All rights reserved.
4
+
5
+Module Name:
6
+
7
+ SystemCommand.cpp
8
+
9
+Abstract:
10
+
11
+ Definition of System command tree.
12
+
13
+--*/
14
+#include "CLIExecutionContext.h"
15
+#include "SystemCommand.h"
16
+#include "SessionCommand.h"
17
+
18
+using namespace wsl::windows::wslc::execution;
19
+using namespace wsl::shared;
20
+
21
+namespace wsl::windows::wslc {
22
+std::vector<std::unique_ptr<Command>> SystemCommand::GetCommands() const
23
+{
24
+ std::vector<std::unique_ptr<Command>> commands;
25
+ commands.push_back(std::make_unique<SessionCommand>(FullName()));
26
+ return commands;
27
+}
28
+
29
+std::vector<Argument> SystemCommand::GetArguments() const
30
+{
31
+ return {};
32
+}
33
+
34
+std::wstring SystemCommand::ShortDescription() const
35
+{
36
+ return Localization::WSLCCLI_SystemCommandDesc();
37
+}
38
+
39
+std::wstring SystemCommand::LongDescription() const
40
+{
41
+ return Localization::WSLCCLI_SystemCommandLongDesc();
42
+}
43
+
44
+void SystemCommand::ExecuteInternal(CLIExecutionContext& context) const
45
+{
46
+ OutputHelp();
47
+}
48
+} // namespace wsl::windows::wslc
src/windows/wslc/commands/SystemCommand.h
new
+34
@@ -0,0 +1,34 @@
1
+/*++
2
+
3
+Copyright (c) Microsoft. All rights reserved.
4
+
5
+Module Name:
6
+
7
+ SystemCommand.h
8
+
9
+Abstract:
10
+
11
+ Declaration of System command tree.
12
+
13
+--*/
14
+#pragma once
15
+#include "Command.h"
16
+
17
+namespace wsl::windows::wslc {
18
+// Root System Command
19
+struct SystemCommand final : public Command
20
+{
21
+ constexpr static std::wstring_view CommandName = L"system";
22
+ SystemCommand(const std::wstring& parent) : Command(CommandName, parent)
23
+ {
24
+ }
25
+ std::vector<Argument> GetArguments() const override;
26
+ std::wstring ShortDescription() const override;
27
+ std::wstring LongDescription() const override;
28
+
29
+ std::vector<std::unique_ptr<Command>> GetCommands() const override;
30
+
31
+protected:
32
+ void ExecuteInternal(CLIExecutionContext& context) const override;
33
+};
34
+} // namespace wsl::windows::wslc
test/windows/wslc/CommandLineTestCases.h
+17
-16
@@ -25,22 +25,23 @@ COMMAND_LINE_TEST_CASE(L"-?", L"root", true)
25
COMMAND_LINE_TEST_CASE(L"--version", L"root", true)
26
COMMAND_LINE_TEST_CASE(L"-v", L"root", true)
27
28
-// Session command tests
29
-COMMAND_LINE_TEST_CASE(L"session list", L"list", true)
30
-COMMAND_LINE_TEST_CASE(L"session list --verbose", L"list", true)
31
-COMMAND_LINE_TEST_CASE(L"session list --verbose --help", L"list", true)
32
-COMMAND_LINE_TEST_CASE(L"session list --notanarg", L"list", false)
33
-COMMAND_LINE_TEST_CASE(L"session list extraarg", L"list", false)
34
-COMMAND_LINE_TEST_CASE(L"session shell session1", L"shell", true)
35
-COMMAND_LINE_TEST_CASE(L"session shell", L"shell", true)
36
-COMMAND_LINE_TEST_CASE(L"session terminate session1", L"terminate", true)
37
-COMMAND_LINE_TEST_CASE(L"session terminate", L"terminate", true)
38
-COMMAND_LINE_TEST_CASE(L"session enter C:\\storage", L"enter", true)
39
-COMMAND_LINE_TEST_CASE(L"session enter C:\\storage --name my-session", L"enter", true)
40
-COMMAND_LINE_TEST_CASE(L"session enter --name my-session C:\\storage", L"enter", true)
41
-COMMAND_LINE_TEST_CASE(L"session enter", L"enter", false) // Missing required storage-path
42
-COMMAND_LINE_TEST_CASE(L"session enter C:\\storage --notanarg", L"enter", false) // Invalid argument
43
-COMMAND_LINE_TEST_CASE(L"session enter --name my-session", L"enter", false) // Missing required positional before flag
28
+// System command tests
29
+COMMAND_LINE_TEST_CASE(L"system -?", L"system", true)
30
+COMMAND_LINE_TEST_CASE(L"system session list", L"list", true)
31
+COMMAND_LINE_TEST_CASE(L"system session list --verbose", L"list", true)
32
+COMMAND_LINE_TEST_CASE(L"system session list --verbose --help", L"list", true)
33
+COMMAND_LINE_TEST_CASE(L"system session list --notanarg", L"list", false)
34
+COMMAND_LINE_TEST_CASE(L"system session list extraarg", L"list", false)
35
+COMMAND_LINE_TEST_CASE(L"system session shell session1", L"shell", true)
36
+COMMAND_LINE_TEST_CASE(L"system session shell", L"shell", true)
37
+COMMAND_LINE_TEST_CASE(L"system session terminate session1", L"terminate", true)
38
+COMMAND_LINE_TEST_CASE(L"system session terminate", L"terminate", true)
39
+COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage", L"enter", true)
40
+COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage --name my-session", L"enter", true)
41
+COMMAND_LINE_TEST_CASE(L"system session enter --name my-session C:\\storage", L"enter", true)
42
+COMMAND_LINE_TEST_CASE(L"system session enter", L"enter", false) // Missing required storage-path
43
+COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage --notanarg", L"enter", false) // Invalid argument
44
+COMMAND_LINE_TEST_CASE(L"system session enter --name my-session", L"enter", false) // Missing required positional before flag
45
46
// Container command tests
47
COMMAND_LINE_TEST_CASE(L"container list", L"list", true)
test/windows/wslc/WSLCCLICommandUnitTests.cpp
+21
-4
@@ -22,6 +22,7 @@ Abstract:
22
#include "RootCommand.h"
23
#include "ContainerCommand.h"
24
#include "SessionCommand.h"
25
+#include "SystemCommand.h"
26
#include "VersionCommand.h"
27
28
using namespace wsl::windows::wslc;
@@ -65,10 +66,26 @@ class WSLCCLICommandUnitTests
66
}
67
}
68
68
- // Test: Verify SessionCommand has subcommands
69
+ // Test: Verify SystemCommand has subcommands
70
+ TEST_METHOD(SystemCommand_HasSubcommands)
71
+ {
72
+ auto cmd = SystemCommand(L"system");
73
+ auto subcommands = cmd.GetCommands();
74
+
75
+ // Verify it has subcommands
76
+ VERIFY_IS_TRUE(subcommands.size() > 0);
77
+ LogComment(L"SystemCommand has " + std::to_wstring(subcommands.size()) + L" subcommands");
78
+
79
+ for (const auto& subcmd : subcommands)
80
+ {
81
+ VERIFY_IS_NOT_NULL(subcmd.get());
82
+ }
83
+ }
84
+
85
+ // Test: Verify SessionCommand has subcommands (now under system)
86
TEST_METHOD(SessionCommand_HasSubcommands)
87
{
71
- auto cmd = SessionCommand(L"session");
88
+ auto cmd = SessionCommand(L"system session");
89
auto subcommands = cmd.GetCommands();
90
91
// Verify it has subcommands
@@ -85,7 +102,7 @@ class WSLCCLICommandUnitTests
102
// Test: Verify SessionEnterCommand has the expected arguments
103
TEST_METHOD(SessionEnterCommand_HasExpectedArguments)
104
{
88
- auto cmd = SessionEnterCommand(L"session");
105
+ auto cmd = SessionEnterCommand(L"system session");
106
auto args = cmd.GetArguments();
107
108
// Should have 2 arguments: storage-path (positional, required) and name (value, optional)
@@ -107,7 +124,7 @@ class WSLCCLICommandUnitTests
124
// Test: Verify SessionEnterCommand descriptions are not empty
125
TEST_METHOD(SessionEnterCommand_HasDescriptions)
126
{
110
- auto cmd = SessionEnterCommand(L"session");
127
+ auto cmd = SessionEnterCommand(L"system session");
128
129
VERIFY_IS_FALSE(cmd.ShortDescription().empty());
130
VERIFY_IS_FALSE(cmd.LongDescription().empty());
test/windows/wslc/e2e/WSLCE2EGlobalTests.cpp
+24
-24
@@ -83,7 +83,7 @@ class WSLCE2EGlobalTests
83
result.Verify({.Stderr = L"", .ExitCode = 0});
84
85
// Verify session list shows the admin session name
86
- result = RunWslc(L"session list", ElevationType::Elevated);
86
+ result = RunWslc(L"system session list", ElevationType::Elevated);
87
result.Verify({.Stderr = L"", .ExitCode = 0});
88
89
VERIFY_IS_TRUE(result.Stdout.has_value());
@@ -98,7 +98,7 @@ class WSLCE2EGlobalTests
98
result.Verify({.Stderr = L"", .ExitCode = 0});
99
100
// Verify session list shows the non-admin session name
101
- result = RunWslc(L"session list", ElevationType::NonElevated);
101
+ result = RunWslc(L"system session list", ElevationType::NonElevated);
102
result.Verify({.Stderr = L"", .ExitCode = 0});
103
104
VERIFY_IS_TRUE(result.Stdout.has_value());
@@ -244,17 +244,17 @@ class WSLCE2EGlobalTests
244
result.Verify({.Stderr = L"", .ExitCode = 0});
245
246
// Verify session list shows the admin session name
247
- result = RunWslc(L"session list");
247
+ result = RunWslc(L"system session list");
248
result.Verify({.Stderr = L"", .ExitCode = 0});
249
VERIFY_IS_TRUE(result.Stdout.has_value());
250
VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
251
252
// Terminate the session
253
- result = RunWslc(L"session terminate");
253
+ result = RunWslc(L"system session terminate");
254
result.Verify({.Stderr = L"", .ExitCode = 0});
255
256
// Verify session no longer shows up
257
- result = RunWslc(L"session list");
257
+ result = RunWslc(L"system session list");
258
result.Verify({.Stderr = L"", .ExitCode = 0});
259
VERIFY_IS_TRUE(result.Stdout.has_value());
260
VERIFY_IS_FALSE(result.Stdout->find(adminName) != std::wstring::npos);
@@ -266,17 +266,17 @@ class WSLCE2EGlobalTests
266
result.Verify({.Stderr = L"", .ExitCode = 0});
267
268
// Verify session list shows the non-elevated session name
269
- result = RunWslc(L"session list");
269
+ result = RunWslc(L"system session list");
270
result.Verify({.Stderr = L"", .ExitCode = 0});
271
VERIFY_IS_TRUE(result.Stdout.has_value());
272
VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
273
274
// Terminate the session
275
- result = RunWslc(L"session terminate", ElevationType::NonElevated);
275
+ result = RunWslc(L"system session terminate", ElevationType::NonElevated);
276
result.Verify({.Stderr = L"", .ExitCode = 0});
277
278
// Verify session no longer shows up
279
- result = RunWslc(L"session list");
279
+ result = RunWslc(L"system session list");
280
result.Verify({.Stderr = L"", .ExitCode = 0});
281
VERIFY_IS_TRUE(result.Stdout.has_value());
282
VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -292,17 +292,17 @@ class WSLCE2EGlobalTests
292
result.Verify({.Stderr = L"", .ExitCode = 0});
293
294
// Verify session list shows the admin session name
295
- result = RunWslc(L"session list");
295
+ result = RunWslc(L"system session list");
296
result.Verify({.Stderr = L"", .ExitCode = 0});
297
VERIFY_IS_TRUE(result.Stdout.has_value());
298
VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
299
300
// Terminate the session
301
- result = RunWslc(std::format(L"session terminate {}", adminName));
301
+ result = RunWslc(std::format(L"system session terminate {}", adminName));
302
result.Verify({.Stderr = L"", .ExitCode = 0});
303
304
// Verify session no longer shows up
305
- result = RunWslc(L"session list");
305
+ result = RunWslc(L"system session list");
306
result.Verify({.Stderr = L"", .ExitCode = 0});
307
VERIFY_IS_TRUE(result.Stdout.has_value());
308
VERIFY_IS_FALSE(result.Stdout->find(adminName) != std::wstring::npos);
@@ -314,17 +314,17 @@ class WSLCE2EGlobalTests
314
result.Verify({.Stderr = L"", .ExitCode = 0});
315
316
// Verify session list shows the non-elevated session name
317
- result = RunWslc(L"session list");
317
+ result = RunWslc(L"system session list");
318
result.Verify({.Stderr = L"", .ExitCode = 0});
319
VERIFY_IS_TRUE(result.Stdout.has_value());
320
VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
321
322
// Terminate the session
323
- result = RunWslc(std::format(L"session terminate {}", nonAdminName), ElevationType::NonElevated);
323
+ result = RunWslc(std::format(L"system session terminate {}", nonAdminName), ElevationType::NonElevated);
324
result.Verify({.Stderr = L"", .ExitCode = 0});
325
326
// Verify session no longer shows up
327
- result = RunWslc(L"session list");
327
+ result = RunWslc(L"system session list");
328
result.Verify({.Stderr = L"", .ExitCode = 0});
329
VERIFY_IS_TRUE(result.Stdout.has_value());
330
VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -342,22 +342,22 @@ class WSLCE2EGlobalTests
342
result.Verify({.Stderr = L"", .ExitCode = 0});
343
344
// Verify session list shows both sessions.
345
- result = RunWslc(L"session list");
345
+ result = RunWslc(L"system session list");
346
result.Verify({.Stderr = L"", .ExitCode = 0});
347
VERIFY_IS_TRUE(result.Stdout.has_value());
348
VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
349
VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
350
351
// Attempt to terminate the admin session from the non-elevated process and fail.
352
- result = RunWslc(std::format(L"session terminate {}", adminName), ElevationType::NonElevated);
352
+ result = RunWslc(std::format(L"system session terminate {}", adminName), ElevationType::NonElevated);
353
result.Verify({.Stderr = L"The requested operation requires elevation. \r\nError code: ERROR_ELEVATION_REQUIRED\r\n", .ExitCode = 1});
354
355
// Terminate the non-elevated session from the elevated process.
356
- result = RunWslc(std::format(L"session terminate {}", nonAdminName), ElevationType::Elevated);
356
+ result = RunWslc(std::format(L"system session terminate {}", nonAdminName), ElevationType::Elevated);
357
result.Verify({.Stderr = L"", .ExitCode = 0});
358
359
// Verify non-elevated session no longer shows up
360
- result = RunWslc(L"session list");
360
+ result = RunWslc(L"system session list");
361
result.Verify({.Stderr = L"", .ExitCode = 0});
362
VERIFY_IS_TRUE(result.Stdout.has_value());
363
VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -382,7 +382,7 @@ class WSLCE2EGlobalTests
382
result.Verify({.Stdout = L"", .Stderr = L"Element not found. \r\nError code: ERROR_NOT_FOUND\r\n", .ExitCode = 1});
383
384
// Verify session list
385
- result = RunWslc(L"session list");
385
+ result = RunWslc(L"system session list");
386
result.Verify({.Stderr = L"", .ExitCode = 0});
387
388
// Verify there is a session with the name of the test session in the session list output.
@@ -419,7 +419,7 @@ class WSLCE2EGlobalTests
419
Log::Comment(L"Testing elevated interactive session");
420
// Session shell should attach to the correct default session.
421
// Test should be elevated, therefore this should be the admin session.
422
- auto session = RunWslcInteractive(L"session shell");
422
+ auto session = RunWslcInteractive(L"system session shell");
423
VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
424
425
session.ExpectStdout(VT::SESSION_PROMPT);
@@ -444,7 +444,7 @@ class WSLCE2EGlobalTests
444
Log::Comment(L"Testing non-elevated interactive session with explicit session name");
445
// Non-Elevated session shell should attach to the wslc by name also.
446
auto nonAdminName = GetExpectedDefaultSessionName(false);
447
- auto session = RunWslcInteractive(std::format(L"session shell {}", nonAdminName), ElevationType::NonElevated);
447
+ auto session = RunWslcInteractive(std::format(L"system session shell {}", nonAdminName), ElevationType::NonElevated);
448
VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
449
450
session.ExpectStdout(VT::SESSION_PROMPT);
@@ -469,7 +469,7 @@ class WSLCE2EGlobalTests
469
Log::Comment(L"Testing elevated interactive session with explicit admin session name");
470
// Elevated session shell should attach to the wslc by name also.
471
auto adminName = GetExpectedDefaultSessionName(true);
472
- auto session = RunWslcInteractive(std::format(L"session shell {}", adminName), ElevationType::Elevated);
472
+ auto session = RunWslcInteractive(std::format(L"system session shell {}", adminName), ElevationType::Elevated);
473
VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
474
475
session.ExpectStdout(VT::SESSION_PROMPT);
@@ -526,8 +526,8 @@ private:
526
{L"container", Localization::WSLCCLI_ContainerCommandDesc()},
527
{L"image", Localization::WSLCCLI_ImageCommandDesc()},
528
{L"registry", Localization::WSLCCLI_RegistryCommandDesc()},
529
- {L"session", Localization::WSLCCLI_SessionCommandDesc()},
529
{L"settings", Localization::WSLCCLI_SettingsCommandDesc()},
530
+ {L"system", Localization::WSLCCLI_SystemCommandDesc()},
531
{L"volume", Localization::WSLCCLI_VolumeCommandDesc()},
532
{L"attach", Localization::WSLCCLI_ContainerAttachDesc()},
533
{L"build", Localization::WSLCCLI_ImageBuildDesc()},
@@ -579,4 +579,4 @@ private:
579
return options.str();
580
}
581
};
582
-} // namespace WSLCE2ETests
\ No newline at end of file
582
+} // namespace WSLCE2ETests
test/windows/wslc/e2e/WSLCE2EHelpers.cpp
+3
-3
@@ -394,7 +394,7 @@ void EnsureSessionIsTerminated(const std::wstring& sessionName)
394
targetSession = std::format(L"{}-{}", baseName, username);
395
}
396
397
- auto listResult = RunWslc(L"session list");
397
+ auto listResult = RunWslc(L"system session list");
398
listResult.Verify({.Stderr = L"", .ExitCode = 0});
399
400
auto stdoutLines = listResult.GetStdoutLines();
@@ -403,7 +403,7 @@ void EnsureSessionIsTerminated(const std::wstring& sessionName)
403
// Check if the line ends with the target session name
404
if (line.size() >= targetSession.size() && line.compare(line.size() - targetSession.size(), targetSession.size(), targetSession) == 0)
405
{
406
- auto result = RunWslc(std::format(L"session terminate \"{}\"", targetSession));
406
+ auto result = RunWslc(std::format(L"system session terminate \"{}\"", targetSession));
407
result.Verify({.Stdout = L"", .Stderr = L"", .ExitCode = 0});
408
break;
409
}
@@ -492,4 +492,4 @@ std::wstring GetPythonHttpServerScript(uint16_t port)
492
{
493
return std::format(L"python3 -m http.server {}", port);
494
}
495
-} // namespace WSLCE2ETests
\ No newline at end of file
495
+} // namespace WSLCE2ETests
test/windows/wslc/e2e/WSLCE2ESessionEnterTests.cpp
+6
-6
@@ -58,7 +58,7 @@ class WSLCE2ESessionEnterTests
58
RunWslc(L"image ls").Verify({.ExitCode = 0});
59
60
// Terminate the wslc session since we use its storage path in this test class.
61
- RunWslc(L"session terminate");
61
+ RunWslc(L"system session terminate");
62
return true;
63
}
64
@@ -67,7 +67,7 @@ class WSLCE2ESessionEnterTests
67
constexpr auto sessionName = L"test-wslc-session-enter";
68
69
// Run an interactive session enter with an explicit name.
70
- auto session = RunWslcInteractive(std::format(L"session enter \"{}\" --name {}", GetDefaultStoragePath(), sessionName));
70
+ auto session = RunWslcInteractive(std::format(L"system session enter \"{}\" --name {}", GetDefaultStoragePath(), sessionName));
71
VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
72
73
session.ExpectStdout(VT::SESSION_PROMPT);
@@ -80,7 +80,7 @@ class WSLCE2ESessionEnterTests
80
session.ExpectStdout(VT::SESSION_PROMPT);
81
82
// Verify the session appears in session list.
83
- auto listResult = RunWslc(L"session list");
83
+ auto listResult = RunWslc(L"system session list");
84
listResult.Verify({.Stderr = L"", .ExitCode = S_OK});
85
VERIFY_IS_TRUE(listResult.Stdout.has_value());
86
VERIFY_IS_TRUE(listResult.Stdout->find(sessionName) != std::wstring::npos);
@@ -89,7 +89,7 @@ class WSLCE2ESessionEnterTests
89
VERIFY_ARE_EQUAL(session.Exit(), 0);
90
91
// Verify the session is no longer in the session list after exiting.
92
- listResult = RunWslc(L"session list");
92
+ listResult = RunWslc(L"system session list");
93
listResult.Verify({.Stderr = L"", .ExitCode = S_OK});
94
VERIFY_IS_TRUE(listResult.Stdout.has_value());
95
VERIFY_IS_FALSE(listResult.Stdout->find(sessionName) != std::wstring::npos);
@@ -97,7 +97,7 @@ class WSLCE2ESessionEnterTests
97
98
WSLC_TEST_METHOD(WSLCE2E_SessionEnter_WithoutName_GeneratesGuid)
99
{
100
- auto session = RunWslcInteractive(std::format(L"session enter \"{}\"", GetDefaultStoragePath()));
100
+ auto session = RunWslcInteractive(std::format(L"system session enter \"{}\"", GetDefaultStoragePath()));
101
VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
102
103
session.ExpectStderr("Created session: ");
@@ -108,7 +108,7 @@ class WSLCE2ESessionEnterTests
108
109
WSLC_TEST_METHOD(WSLCE2E_SessionEnter_StoragePathNotFound)
110
{
111
- auto result = RunWslc(L"session enter does-not-exist");
111
+ auto result = RunWslc(L"system session enter does-not-exist");
112
result.Verify({
113
.Stderr = L"The system cannot find the path specified. \r\nError code: ERROR_PATH_NOT_FOUND\r\n",
114
.ExitCode = 1,