You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mm...@apache.org on 2019/02/27 18:54:29 UTC

[geode-native] branch develop updated: GEODE-4340: authinit (#441)

This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new b9d803c  GEODE-4340: authinit (#441)
b9d803c is described below

commit b9d803c2b5812bd0862ccd9c30533d4d3076adc8
Author: Michael Martell <mm...@pivotal.io>
AuthorDate: Wed Feb 27 10:54:25 2019 -0800

    GEODE-4340: authinit (#441)
    
    * Added authInit cpp example
    * Normalized README.md for all examples
    * Simplified BUILDING.md instructions to require fewer steps and parameters
    * Copying startup and shutdown scripts into example install directories
    * Eliminated the need to modify the PATH to get cpp examples to run
    * Support new folder names for examples
    * Use find module for GeodeNative to copy apach-geode.dll to example build dir
    
    Co-Authored by: Matthew Reddington <mr...@pivotal.io>
---
 examples/BUILD-EXAMPLES.md                         |  14 +--
 examples/cpp/CMakeLists.txt                        |   5 +-
 examples/cpp/CMakeLists.txt.cpp_example.in         |  11 ++
 examples/cpp/CMakeLists.txt.in                     |   1 +
 examples/cpp/authinitialize/README.md              |  65 +++++++++++
 .../cpp/authinitialize/exampleAuthInitialize.cpp   |  42 +++++++
 .../cpp/authinitialize/exampleAuthInitialize.hpp   |  34 ++++++
 examples/cpp/authinitialize/main.cpp               |  58 ++++++++++
 examples/cpp/authinitialize/startserver.ps1        |  45 ++++++++
 examples/cpp/authinitialize/startserver.sh         |  37 +++++++
 .../stopserver.ps1}                                |  36 +++---
 .../stopserver.sh}                                 |  26 +++--
 examples/cpp/continuousquery/README.md             | 117 ++++++++++----------
 .../{CMakeLists.txt => startserver.ps1}            |  36 +++---
 .../{CMakeLists.txt => stopserver.ps1}             |  36 +++---
 examples/cpp/dataserializable/README.md            | 122 ++++++++++-----------
 .../startserver.ps1}                               |  36 +++---
 .../stopserver.ps1}                                |  36 +++---
 examples/cpp/function-execution/README.md          |  79 ++++++-------
 examples/cpp/function-execution/startserver.ps1    |  39 +++++++
 .../stopserver.ps1}                                |  38 ++++---
 examples/cpp/pdxserializable/README.md             | 116 ++++++++++----------
 .../startserver.ps1}                               |  36 +++---
 .../stopserver.ps1}                                |  36 +++---
 examples/cpp/pdxserializer/README.md               | 108 +++++++++---------
 .../startserver.ps1}                               |  36 +++---
 .../stopserver.ps1}                                |  36 +++---
 examples/cpp/put-get-remove/README.md              | 110 ++++++++++---------
 .../startserver.ps1}                               |  36 +++---
 .../stopserver.ps1}                                |  36 +++---
 examples/cpp/remotequery/README.md                 | 112 ++++++++++---------
 .../CMakeLists.txt => remotequery/startserver.ps1} |  36 +++---
 .../CMakeLists.txt => remotequery/stopserver.ps1}  |  36 +++---
 examples/cpp/transaction/README.md                 | 110 ++++++++++---------
 .../CMakeLists.txt => transaction/startserver.ps1} |  36 +++---
 .../CMakeLists.txt => transaction/stopserver.ps1}  |  23 ++--
 .../authiniialize/stopserver.ps1}                  |  36 +++---
 examples/dotnet/authinitialize/README.md           |  52 ++++++---
 examples/dotnet/continuousquery/README.md          |  69 ++++++++----
 examples/dotnet/dataserializable/README.md         |  86 +++++++--------
 examples/dotnet/functionexecution/README.md        |  63 ++++++++---
 examples/dotnet/pdxautoserializer/README.md        |  57 +++++++---
 examples/dotnet/pdxserializable/README.md          |  57 +++++++---
 examples/dotnet/put-get-remove/README.md           |  58 +++++++---
 examples/dotnet/remotequery/README.md              |  65 +++++++----
 45 files changed, 1539 insertions(+), 820 deletions(-)

diff --git a/examples/BUILD-EXAMPLES.md b/examples/BUILD-EXAMPLES.md
index d05079c..dfae507 100644
--- a/examples/BUILD-EXAMPLES.md
+++ b/examples/BUILD-EXAMPLES.md
@@ -4,6 +4,7 @@
 * Install [Apache Geode](https://geode.apache.org)
 * Install [CMake](https://cmake.org/download/)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Set `GEODE_HOME` to the install directory of Apache Geode
 * **For Windows:** Visual Studio 2017
 * Optional: OpenSSL (to build and run the SSL examples)
 
@@ -26,14 +27,11 @@
   
    **For Windows:** Include options that specify the generator, the architecture toolset, and the path to the Geode Native installation:
 
-    ```
-    $ cd workspace/examples/
-    $ mkdir build
-    $ cd build
-    $ cmake .. -G"Visual Studio 15 2017 Win64" -Thost=x64 -DGeodeNative_ROOT="<NC-install-root-dir>" -DGEODE_ROOT="<geode-install-dir>"
-    $ cmake --build . -- <optional parallelism parameter>
-    ```
-  where the optional parallelism parameter is `/m`.
+       $ cd workspace/examples/
+       $ mkdir build
+       $ cd build
+       $ cmake <geode-native-install-dir>/examples -G"Visual Studio 15 2017 Win64"
+       $ cmake --build .
 
 ## Running the Examples
 To run an example,
diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
index b87067d..d90e806 100644
--- a/examples/cpp/CMakeLists.txt
+++ b/examples/cpp/CMakeLists.txt
@@ -30,6 +30,9 @@ function(add_example)
     @ONLY)
 endfunction()
 
+add_example(NAME authinitialize
+	SOURCE main.cpp exampleAuthInitialize.hpp exampleAuthInitialize.cpp)
+
 add_example(NAME continuousquery
     SOURCE main.cpp Order.cpp Order.hpp)
 
@@ -54,7 +57,7 @@ add_example(NAME remotequery
 add_example(NAME transaction
         SOURCE main.cpp)
 
-  install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   DESTINATION examples/
   PATTERN "./*.in" EXCLUDE
   PATTERN "CMakeFiles" EXCLUDE
diff --git a/examples/cpp/CMakeLists.txt.cpp_example.in b/examples/cpp/CMakeLists.txt.cpp_example.in
index 2f251ab..d45f969 100644
--- a/examples/cpp/CMakeLists.txt.cpp_example.in
+++ b/examples/cpp/CMakeLists.txt.cpp_example.in
@@ -24,9 +24,20 @@ find_package(@PRODUCT_NAME_NOSPACE@ REQUIRED COMPONENTS cpp)
 
 add_executable(${PROJECT_NAME} @ADD_EXAMPLE_SOURCE@)
 
+configure_file("startserver.ps1" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+configure_file("stopserver.ps1" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
 configure_file("startserver.sh" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
 configure_file("stopserver.sh" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+configure_file("README.md" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
 
 target_link_libraries(${PROJECT_NAME}
     PUBLIC
     @PRODUCT_NAME_NOSPACE@::cpp)
+
+if(WIN32)
+  add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy
+      $<SH...@.dll>
+      $<SHELL_PATH:$<TARGET_FILE_DIR:${PROJECT_NAME}>>
+  )
+endif()
\ No newline at end of file
diff --git a/examples/cpp/CMakeLists.txt.in b/examples/cpp/CMakeLists.txt.in
index a9852a1..3cf7367 100644
--- a/examples/cpp/CMakeLists.txt.in
+++ b/examples/cpp/CMakeLists.txt.in
@@ -17,6 +17,7 @@ cmake_minimum_required(VERSION 3.10)
 
 project(@PRODUCT_DLL_NAME@.Cpp.Examples LANGUAGES NONE)
 
+add_subdirectory(authinitialize)
 add_subdirectory(continuousquery)
 add_subdirectory(dataserializable)
 add_subdirectory(function-execution)
diff --git a/examples/cpp/authinitialize/README.md b/examples/cpp/authinitialize/README.md
new file mode 100644
index 0000000..8c5826a
--- /dev/null
+++ b/examples/cpp/authinitialize/README.md
@@ -0,0 +1,65 @@
+# AuthInitialize Example
+This example shows how to create and register a custom `AuthIntialize` authentication
+handler on the client that authenticates against a server that was started with the corresponding authenticator. 
+
+## Prerequisites
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
+
+## Running
+1. From a command shell, set the current directory to the `authinitialize` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/authinitialize
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `authinitialize`, expect the following output:
+
+    ```text
+    ExampleAuthInitialize::ExampleAuthInitialize called
+    ExampleAuthInitialize::getCredentials called
+    a = 1
+    b = 2
+    ```
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/authinitialize/exampleAuthInitialize.cpp b/examples/cpp/authinitialize/exampleAuthInitialize.cpp
new file mode 100644
index 0000000..a3d6522
--- /dev/null
+++ b/examples/cpp/authinitialize/exampleAuthInitialize.cpp
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "exampleAuthInitialize.hpp"
+
+#include <iostream>
+
+using apache::geode::client::AuthInitialize;
+using apache::geode::client::Properties;
+
+std::shared_ptr<Properties> ExampleAuthInitialize::getCredentials(
+    const std::shared_ptr<Properties>& securityprops,
+    const std::string& /*server*/) {
+  std::cout << "ExampleAuthInitialize::GetCredentials called\n";
+
+  securityprops->insert("security-username", "root");
+  securityprops->insert("security-password", "root");
+
+  return securityprops;
+}
+
+void ExampleAuthInitialize::close() {
+  std::cout << "ExampleAuthInitialize::close called\n";
+}
+
+ExampleAuthInitialize::ExampleAuthInitialize() : AuthInitialize() {
+  std::cout << "ExampleAuthInitialize::ExampleAuthInitialize called\n";
+}
diff --git a/examples/cpp/authinitialize/exampleAuthInitialize.hpp b/examples/cpp/authinitialize/exampleAuthInitialize.hpp
new file mode 100644
index 0000000..11f8dea
--- /dev/null
+++ b/examples/cpp/authinitialize/exampleAuthInitialize.hpp
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <memory>
+#include <string>
+
+#include <geode/AuthInitialize.hpp>
+#include <geode/Properties.hpp>
+
+class ExampleAuthInitialize : public apache::geode::client::AuthInitialize {
+  std::shared_ptr<apache::geode::client::Properties> getCredentials(
+      const std::shared_ptr<apache::geode::client::Properties>& securityprops,
+      const std::string& server) override;
+
+  void close() override;
+
+ public:
+  ExampleAuthInitialize();
+  ~ExampleAuthInitialize() noexcept = default;
+};
\ No newline at end of file
diff --git a/examples/cpp/authinitialize/main.cpp b/examples/cpp/authinitialize/main.cpp
new file mode 100644
index 0000000..3b27e53
--- /dev/null
+++ b/examples/cpp/authinitialize/main.cpp
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+
+#include <geode/CacheFactory.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "exampleAuthInitialize.hpp"
+
+using apache::geode::client::CacheFactory;
+using apache::geode::client::RegionShortcut;
+using apache::geode::client::CacheableString;
+
+int main(int argc, char** argv) {
+  auto cache = CacheFactory()
+                   .set("log-level", "none")
+                   .setAuthInitialize(std::make_unique<ExampleAuthInitialize>())
+                   .create();
+  auto pool = cache.getPoolManager()
+                   .createFactory()
+                   .addLocator("localhost", 10334)
+                   .create("pool");
+  auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+                     .setPoolName("pool")
+                     .create("region");
+
+  region->put("a", "1");
+  region->put("b", "2");
+
+  auto a = region->get("a");
+  auto b = region->get("b");
+
+  std::cout << "a = "
+            << std::dynamic_pointer_cast<CacheableString>(a)->value()
+            << std::endl;
+  std::cout << "b = "
+            << std::dynamic_pointer_cast<CacheableString>(b)->value()
+            << std::endl;
+
+  cache.close();
+}
diff --git a/examples/cpp/authinitialize/startserver.ps1 b/examples/cpp/authinitialize/startserver.ps1
new file mode 100644
index 0000000..354e7c3
--- /dev/null
+++ b/examples/cpp/authinitialize/startserver.ps1
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
+
+if ($GFSH_PATH -ne "")
+{
+  # Set this variable to include your java object that implements the Authenticator class
+  $RESOLVEDPATH = Resolve-Path -Path "$PSScriptRoot/../../utilities/example.jar"
+
+  # Set this variable to the full name of your Authenticator.create function
+  $AUTHENTICATOR = 'javaobject.SimpleAuthenticator.create'
+
+  Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --classpath=$RESOLVEDPATH --J=-Dgemfire.security-client-authenticator=$AUTHENTICATOR --dir=$PSScriptRoot\server' -e 'create region --name=region --type=PARTITION'"
+}
diff --git a/examples/cpp/authinitialize/startserver.sh b/examples/cpp/authinitialize/startserver.sh
new file mode 100644
index 0000000..9e38174
--- /dev/null
+++ b/examples/cpp/authinitialize/startserver.sh
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/usr/bin/env bash
+GFSH_PATH=""
+which gfsh 2> /dev/null
+
+if [ $? -eq 0 ]; then
+    GFSH_PATH="gfsh"
+else
+    if [ "$GEODE_HOME" == "" ]; then
+        echo "Could not find gfsh. Please set the GEODE_HOME path."
+        echo "e.g. export GEODE_HOME=<path to Geode>"
+    else
+        GFSH_PATH=$GEODE_HOME/bin/gfsh
+    fi
+fi
+
+# Set this variable to include your java object that implements the Authenticator class
+RESOLVEDPATH = "../../utilities/example.jar"
+
+# Set this variable to the full name of your Authenticator.create function
+AUTHENTICATOR = 'javaobject.SimpleAuthenticator.create'
+
+$GFSH_PATH  -e "start locator --name=locator" -e "start server --name=server --classpath=${RESOLVEDPATH} --J=-Dgemfire.security-client-authenticator=$AUTHENTICATOR"  -e "create region --name=region --type=PARTITION"
diff --git a/examples/cpp/dataserializable/CMakeLists.txt b/examples/cpp/authinitialize/stopserver.ps1
similarity index 54%
rename from examples/cpp/dataserializable/CMakeLists.txt
rename to examples/cpp/authinitialize/stopserver.ps1
index 22ac649..ec2c218 100644
--- a/examples/cpp/dataserializable/CMakeLists.txt
+++ b/examples/cpp/authinitialize/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(customdataserializable LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=region' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/authinitialize/stopserver.sh
similarity index 65%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/authinitialize/stopserver.sh
index 11b5ac6..67a0f85 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/authinitialize/stopserver.sh
@@ -13,17 +13,19 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+#!/usr/bin/env bash
+GFSH_PATH=""
+which gfsh 2> /dev/null
 
-project(continuousquery LANGUAGES CXX)
+if [ $? -eq 0 ]; then
+    GFSH_PATH="gfsh"
+else
+    if [ "$GEODE_HOME" == "" ]; then
+        echo "Could not find gfsh. Please set the GEODE_HOME path."
+        echo "e.g. export GEODE_HOME=<path to Geode>"
+    else
+        GFSH_PATH=$GEODE_HOME/bin/gfsh
+    fi
+fi
 
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+$GFSH_PATH -e "connect" -e "stop server --name=server" -e "stop locator --name=locator"
diff --git a/examples/cpp/continuousquery/README.md b/examples/cpp/continuousquery/README.md
index 59d557b..fdb2076 100644
--- a/examples/cpp/continuousquery/README.md
+++ b/examples/cpp/continuousquery/README.md
@@ -2,60 +2,67 @@
 This is a simple example showing how to create a continuous query.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `continuousquery` directory in your installed example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/continuousquery
-  ```
-
-1. Run the `startserver.sh` script to start the Geode locator, server, and create a region.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-  ```
-
-1. Execute `continuousquery`:
-
-  ```
-  $ ./continuousquery
-  Executing continuous query
-  Create orders
-  Putting and changing Order objects in the region
-  MyCqListener::OnEvent called with CREATE, key[Order2], value(2, product y, 37)
-  MyCqListener::OnEvent called with CREATE, key[Order4], value(4, product z, 102)
-  MyCqListener::OnEvent called with CREATE, key[Order6], value(6, product z, 42)
-  MyCqListener::OnEvent called with UPDATE, key[Order2], value(2, product y, 45)
-  MyCqListener::OnEvent called with DESTROY, key[Order2], value(2, product y, 29)
-  MyCqListener::OnEvent called with DESTROY, key[Order6], value is nullptr
-  close called
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `continuousquery` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/continuousquery
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+   ```console
+   $ powershell.exe -File startserver.ps1
+   ```
+
+   For Windows Powershell:
+
+    ```console
+   $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `continuousquery`, expect the following output:
+
+       Executing continuous query
+       Create orders
+       Putting and changing Order objects in the region
+       MyCqListener::OnEvent called with CREATE, key[Order2], value(2, product y, 37)
+       MyCqListener::OnEvent called with CREATE, key[Order4], value(4, product z, 102)
+       MyCqListener::OnEvent called with CREATE, key[Order6], value(6, product z, 42)
+       MyCqListener::OnEvent called with UPDATE, key[Order2], value(2, product y, 45)
+       MyCqListener::OnEvent called with DESTROY, key[Order2], value(2, product y, 29)
+       MyCqListener::OnEvent called with DESTROY, key[Order6], value is nullptr
+       close called
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/continuousquery/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/continuousquery/startserver.ps1
index 11b5ac6..347eda1 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/continuousquery/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=example_orderobject --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/continuousquery/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/continuousquery/stopserver.ps1
index 11b5ac6..10d2352 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/continuousquery/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_orderobject' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/dataserializable/README.md b/examples/cpp/dataserializable/README.md
index 03f5a64..96287b2 100644
--- a/examples/cpp/dataserializable/README.md
+++ b/examples/cpp/dataserializable/README.md
@@ -2,66 +2,66 @@
 This is a simple example showing how to register for serialization of custom objects using the DataSerializable class.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `dataserializable` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/dataserializable
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-  ```
-
-1. Execute `dataserializable`:
-
-  ```
-  $ ./dataserializable
-  Create orders
-  Storing orders in the region
-  Getting the orders from the region
-  OrderID: 1
-  Product Name: product x
-  Quantity: 23
-  OrderID: 2
-  Product Name: product y
-  Quantity: 37
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - destroy region --name=custom_orders
-
-  Member | Status
-  ------ | ----------------------------------------------
-  server | Region '/custom_orders' destroyed successfully
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `dataserializable` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/dataserializable
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+1. Execute `dataserializable`, expect the following output:
+
+       Create orders
+       Storing orders in the region
+       Getting the orders from the region
+       OrderID: 1
+       Product Name: product x
+       Quantity: 23
+       OrderID: 2
+       Product Name: product y
+       Quantity: 37
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/dataserializable/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/dataserializable/startserver.ps1
index 11b5ac6..347eda1 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/dataserializable/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=example_orderobject --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/dataserializable/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/dataserializable/stopserver.ps1
index 11b5ac6..10d2352 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/dataserializable/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_orderobject' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/function-execution/README.md b/examples/cpp/function-execution/README.md
index a20deed..57897d2 100644
--- a/examples/cpp/function-execution/README.md
+++ b/examples/cpp/function-execution/README.md
@@ -6,57 +6,62 @@ startserver script deploys a jar file with several custom functions in it, and
 the example app executes those functions and prints out the result set(s).
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `function-execution` directory in your example workspace.
+1. From a command shell, set the current directory to the `function-execution` directory in your example workspace.
 
-  ```
-  $ cd workspace/examples/cpp/function-execution
-  ```
+    ```console
+    $ cd workspace/examples/cpp/function-execution
+    ```
 
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
 
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
+   For Windows cmd:
 
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - deploy --jar=../../utilities/example.jar
-  ...
-  (3) Executing - start server --name=the-server --server-port=50505
-  ...
-  (4) Executing - create region --name=parition_region --type=PARTITION
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
 
-  Member     | Status
-  ---------- | ----------------------------------------------
-  the-server | Region "/partition_region" created on "the-server"
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
   
-1. Run the `function-execution` example:
+3. Execute `function-execution`, expect the following output:
 
-  ```
-  $ ./function-execution 
-  Result count = 3
+       Result count = 3
 
        Result[0]=VALUE--1
        Result[1]=VALUE--2
        Result[2]=VALUE--3
-  ```
 
-1. Stop the server
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
 
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - shutdown --include-locators=true
+    ```console
+    $ stopserver.ps1
+    ```
 
-  Shutdown is triggered
-  ```
+   For Bash:
 
+    ```console
+    $ ./stopserver.sh
+    ```
diff --git a/examples/cpp/function-execution/startserver.ps1 b/examples/cpp/function-execution/startserver.ps1
new file mode 100644
index 0000000..bc38327
--- /dev/null
+++ b/examples/cpp/function-execution/startserver.ps1
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
+
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot/locator' -e 'deploy --jar=../../utilities/example.jar' -e 'start server --name=the-server --server-port=50505' -e 'create region --name=partition_region --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/function-execution/stopserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/function-execution/stopserver.ps1
index 11b5ac6..742ce8d 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/function-execution/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'shutdown --include-locators=true'"
+}
\ No newline at end of file
diff --git a/examples/cpp/pdxserializable/README.md b/examples/cpp/pdxserializable/README.md
index 7f5e8bd..3d00d35 100644
--- a/examples/cpp/pdxserializable/README.md
+++ b/examples/cpp/pdxserializable/README.md
@@ -2,60 +2,66 @@
 This is a simple example showing how to register for serialization of custom objects using the PdxSerializable class.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `pdxserializable` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/pdxserializable
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-  ```
-
-1. Execute `pdxserializable`:
-
-  ```
-  $ ./pdxserializable
-  Create orders
-  Storing orders in the region
-  Getting the orders from the region
-  OrderID: 1
-  Product Name: product x
-  Quantity: 23
-  OrderID: 2
-  Product Name: product y
-  Quantity: 37
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `pdxserializable` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/pdxserializable
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `pdxserializable`, expect the following output:
+
+       Create orders
+       Storing orders in the region
+       Getting the orders from the region
+       OrderID: 1
+       Product Name: product x
+       Quantity: 23
+       OrderID: 2
+       Product Name: product y
+       Quantity: 37
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/pdxserializable/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/pdxserializable/startserver.ps1
index 11b5ac6..347eda1 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/pdxserializable/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=example_orderobject --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/pdxserializable/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/pdxserializable/stopserver.ps1
index 11b5ac6..10d2352 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/pdxserializable/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_orderobject' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/pdxserializer/README.md b/examples/cpp/pdxserializer/README.md
index eaed594..2ab06f9 100644
--- a/examples/cpp/pdxserializer/README.md
+++ b/examples/cpp/pdxserializer/README.md
@@ -2,56 +2,62 @@
 This is a simple example showing how to register for serialization of custom objects using the PdxSerializer class.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `pdxserializer` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/pdxserializer
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-  ```
-
-1. Execute `pdxserializer`:
-
-  ```
-  $ ./pdxserializer
-  Storing orders in the region
-  Getting the orders from the region
-  OrderID: 1
-  Product Name: product x
-  Quantity: 42
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `pdxserializer` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/pdxserializer
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `pdxserializer`, expect the following output:
+
+       Storing orders in the region
+       Getting the orders from the region
+       OrderID: 1
+       Product Name: product x
+       Quantity: 42
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/pdxserializer/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/pdxserializer/startserver.ps1
index 11b5ac6..347eda1 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/pdxserializer/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=example_orderobject --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/pdxserializer/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/pdxserializer/stopserver.ps1
index 11b5ac6..10d2352 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/pdxserializer/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_orderobject' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/put-get-remove/README.md b/examples/cpp/put-get-remove/README.md
index 9f4bd91..65e1fd6 100644
--- a/examples/cpp/put-get-remove/README.md
+++ b/examples/cpp/put-get-remove/README.md
@@ -4,57 +4,63 @@ configure a `Pool` with a `PoolFactory`, and configure a `Region` with a `Region
 We then put, get, and remove some primitive data in the region.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `put-get-remove` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/put-get-remove
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-(3) Executing - create region --name=example_userinfo --type=PARTITION
-
-  Member | Status
-  ------ | ----------------------------------------------
-  server | Region "/example_userinfo" created on "server"
-  ```
-
-1. Execute `put-get-remove`:
-
-  ```
-  $ ./put-get-remove
-  Storing id and username in the region
-  Getting the user info from the region
-    rtimmons = Robert Timmons
-    scharles = Sylvia Charles
-  Removing rtimmons info from the region
-  rtimmons's info successfully deleted
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `put-get-remove` directory in your example workspace.
+
+    ```consaole
+    $ cd workspace/examples/cpp/put-get-remove
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `put-get-remove` expect the following output:
+
+       Storing id and username in the region
+       Getting the user info from the region
+         rtimmons = Robert Timmons
+         scharles = Sylvia Charles
+       Removing rtimmons info from the region
+       rtimmons's info successfully deleted
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/put-get-remove/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/put-get-remove/startserver.ps1
index 11b5ac6..5cec56b 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/put-get-remove/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=example_userinfo --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/put-get-remove/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/put-get-remove/stopserver.ps1
index 11b5ac6..4857a2d 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/put-get-remove/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_userinfo' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/remotequery/README.md b/examples/cpp/remotequery/README.md
index d47d991..a1216c6 100644
--- a/examples/cpp/remotequery/README.md
+++ b/examples/cpp/remotequery/README.md
@@ -2,58 +2,64 @@
 This is a simple example showing how to create and execute a remote query.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `remotequery` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/remotequery
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-  ```
-
-1. Execute `remotequery`:
-
-  ```
-  $ ./remotequery
-  Create orders
-  Storing orders in the region
-  Getting the orders from the region
-  The following orders have a quantity greater than 30:
-  OrderID: 2 Product Name: product y Quantity: 37
-  OrderID: 4 Product Name: product z Quantity: 102
-  OrderID: 6 Product Name: product z Quantity: 42
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `remotequery` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/remotequery
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+   ```console
+   $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `remotequery`, expect the following output:
+
+       Create orders
+       Storing orders in the region
+       Getting the orders from the region
+       The following orders have a quantity greater than 30:
+       OrderID: 2 Product Name: product y Quantity: 37
+       OrderID: 4 Product Name: product z Quantity: 102
+       OrderID: 6 Product Name: product z Quantity: 42
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/remotequery/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/remotequery/startserver.ps1
index 11b5ac6..4c5c849 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/remotequery/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=custom_orders --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/remotequery/stopserver.ps1
similarity index 54%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/remotequery/stopserver.ps1
index 11b5ac6..5ac5117 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/remotequery/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=custom_orders' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/cpp/transaction/README.md b/examples/cpp/transaction/README.md
index 51c7d33..d95062e 100644
--- a/examples/cpp/transaction/README.md
+++ b/examples/cpp/transaction/README.md
@@ -5,57 +5,63 @@ exception handling.  We commit two keys and rollback adding a third key and dest
 existing key while showing how to handle exceptions.
 
 ## Prerequisites
-* An installation of Apache Geode.
-* Apache Geode Native, built and installed.
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `transaction` directory in your example workspace.
-
-  ```
-  $ cd workspace/examples/cpp/transaction
-  ```
-
-1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
-
-  ```
-  $ sh ./startserver.sh
-  /Users/user/geode/bin/gfsh
-
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=exampleRegion --type=PARTITION
-
-  Member | Status
-  ------ | ----------------------------------------------
-  server | Region "/exampleRegion" created on "server"
-  ```
-
-1. Execute `transaction`:
-
-  ```
-  $ ./transaction
-    Created cache
-    Created region 'exampleRegion'
-    Rolled back transaction - retrying(4)
-    Rolled back transaction - retrying(3)
-    Rolled back transaction - retrying(2)
-    Committed transaction - exiting
-  ```
-
-1. Stop the server
-
-  ```
-  $ sh ./stopserver.sh
-  /Users/user/geode/bin/gfsh
-  (1) Executing - connect
-  ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
-  ```
+1. From a command shell, set the current directory to the `transaction` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/cpp/transaction
+    ```
+
+2. Run the `startserver` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./startserver.sh
+    ```
+
+3. Execute `transaction`, expect the following output:
+
+       Created cache
+       Created region 'exampleRegion'
+       Rolled back transaction - retrying(4)
+       Rolled back transaction - retrying(3)
+       Rolled back transaction - retrying(2)
+       Committed transaction - exiting
+
+4. Run the `stopserver` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+     $ stopserver.ps1
+    ```
+
+   For Bash:
+
+    ```console
+    $ ./stopserver.sh
+    ```
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/transaction/startserver.ps1
similarity index 52%
copy from examples/cpp/continuousquery/CMakeLists.txt
copy to examples/cpp/transaction/startserver.ps1
index 11b5ac6..e8fed8b 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/transaction/startserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=exampleRegion --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/cpp/remotequery/CMakeLists.txt b/examples/cpp/transaction/stopserver.ps1
similarity index 69%
rename from examples/cpp/remotequery/CMakeLists.txt
rename to examples/cpp/transaction/stopserver.ps1
index 7743452..e5e7f7f 100644
--- a/examples/cpp/remotequery/CMakeLists.txt
+++ b/examples/cpp/transaction/stopserver.ps1
@@ -13,17 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+}
 
-project(remotequery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=example_orderobject' -e 'stop server --name=server' -e 'stop locator --name=locator'"
\ No newline at end of file
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/dotnet/authiniialize/stopserver.ps1
similarity index 54%
rename from examples/cpp/continuousquery/CMakeLists.txt
rename to examples/dotnet/authiniialize/stopserver.ps1
index 11b5ac6..ec2c218 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/dotnet/authiniialize/stopserver.ps1
@@ -13,17 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5)
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
 
-project(continuousquery LANGUAGES CXX)
-
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
-set(CMAKE_CXX_STANDARD 11)
-
-find_package(GeodeNative REQUIRED COMPONENTS cpp)
-
-add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
-
-target_link_libraries(${PROJECT_NAME}
-    PUBLIC
-    GeodeNative::cpp)
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'destroy region --name=region' -e 'stop server --name=server' -e 'stop locator --name=locator'"
+}
\ No newline at end of file
diff --git a/examples/dotnet/authinitialize/README.md b/examples/dotnet/authinitialize/README.md
index 45da800..c726c8f 100644
--- a/examples/dotnet/authinitialize/README.md
+++ b/examples/dotnet/authinitialize/README.md
@@ -5,25 +5,47 @@ handler on the client that authenticates against a server that was started with
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
-* Apache Geode Native examples, built and installed.
-* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
-* `GEODE_HOME/bin` in the execution path.
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-1. Set the current directory to the `AuthInitialize` directory in your example workspace.
+1. From a command shell, set the current directory to the `AuthInitialize` directory in your example workspace.
 
-  ```
-  $ cd workspace/examples/dotnet/AuthInitialize
-  ```
+    ```console
+    $ cd workspace/examples/dotnet/AuthInitialize
+    ```
 
 2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
 
-3. Execute `AuthInitialize.exe`:
+   For Windows cmd:
 
-  ```
-.\AuthInitialize.exe
-ExampleAuthInitialize::ExampleAuthInitialize called
-ExampleAuthInitialize::GetCredentials called
-a = 1
-b = 2
-  ```
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `AuthInitialize.exe`, expect the following output:
+
+       ExampleAuthInitialize::ExampleAuthInitialize called
+       ExampleAuthInitialize::GetCredentials called
+       a = 1
+       b = 2
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/continuousquery/README.md b/examples/dotnet/continuousquery/README.md
index a652043..c85a766 100644
--- a/examples/dotnet/continuousquery/README.md
+++ b/examples/dotnet/continuousquery/README.md
@@ -4,27 +4,54 @@ This is a simple example showing how to execute a continuous query on a Goede re
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Start Geode Server and create region.
-  ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=example_orderobject --type=PARTITION
-  ```
-* Execute `ContinuousQueryCS.exe`
+1. From a command shell, set the current directory to the `ContinuousQueryCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/ContinuousQueryCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `ContinuousQueryCs.exe`, expect the following output:
   
-  output:
-  ```
-  Registering for data serialization
-  Executing continuous query
-  Create orders
-  Putting and changing Order objects in the region
-  MyCqListener::OnEvent(CREATE) called with key Order2, value Order: [2, product y, 37]
-  MyCqListener::OnEvent(CREATE) called with key Order4, value Order: [4, product z, 102]
-  MyCqListener::OnEvent(CREATE) called with key Order6, value Order: [6, product z, 42]
-  MyCqListener::OnEvent(UPDATE) called with key Order2, value Order: [2, product y, 45]
-  MyCqListener::OnEvent(DESTROY) called with key Order2, value Order: [2, product y, 29]
-  MyCqListener::OnEvent(DESTROY) called with key Order6, value null
-  MyCqListener::close called
-  ```
+       Registering for data serialization
+       Executing continuous query
+       Create orders
+       Putting and changing Order objects in the region
+       MyCqListener::OnEvent(CREATE) called with key Order2, value Order: [2, product y, 37]
+       MyCqListener::OnEvent(CREATE) called with key Order4, value Order: [4, product z, 102]
+       MyCqListener::OnEvent(CREATE) called with key Order6, value Order: [6, product z, 42]
+       MyCqListener::OnEvent(UPDATE) called with key Order2, value Order: [2, product y, 45]
+       MyCqListener::OnEvent(DESTROY) called with key Order2, value Order: [2, product y, 29]
+       MyCqListener::OnEvent(DESTROY) called with key Order6, value null
+       MyCqListener::close called
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/dataserializable/README.md b/examples/dotnet/dataserializable/README.md
index 593ebc9..a0e57f7 100644
--- a/examples/dotnet/dataserializable/README.md
+++ b/examples/dotnet/dataserializable/README.md
@@ -4,50 +4,50 @@ This is a simple example showing how to register for serialization of custom obj
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Open a PowerShell window and `cd` to the `DataSerializableCs` example directory
-* Run `startserver.ps1` to start the Geode Server and create a region.
-
-  ```
-  PS C:\> startserver.ps1
-  (1) Executing - start locator --name=locator
-  ...
-  (2) Executing - start server --name=server
-  ...
-  (3) Executing - create region --name=custom_orders --type=PARTITION
-
-  Member | Status
-  ------ | -------------------------------------------
-  server | Region "/custom_orders" created on "server"
-
-  ```
-* Execute `DataSerializable.exe` to store and retrieve serializable `Order` objects.
-  
-  ```
-  PS C:\> DataSerializableCs.exe
-  Create orders
-  Storing orders in the region
-  Getting the orders from the region
-  OrderID: 1
-  Product Name: product x
-  Quantity: 23
-  OrderID: 2 Product Name: product y Quantity: 37
-  ```
-* Run `stopserver.ps1` to shut down the server.
-
-  ```
-  PS C:\> stopserver.ps1
-  (1) Executing - connect
-  ...
-  (2) Executing - destroy region --name=custom_orders
-
-  Member | Status
-  ------ | ----------------------------------------------
-  server | Region '/custom_orders' destroyed successfully
+1. From a command shell, set the current directory to the `DataSerializableCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/DataSerializableCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `DataSerializableCs.exe`, expect the following output:
   
-  (3) Executing - stop server --name=server
-  ...
-  (4) Executing - stop locator --name=locator
+       Create orders
+       Storing orders in the region
+       Getting the orders from the region
+       OrderID: 1
+       Product Name: product x
+       Quantity: 23
+       OrderID: 2 Product Name: product y Quantity: 37
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
 
-  ```
\ No newline at end of file
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/functionexecution/README.md b/examples/dotnet/functionexecution/README.md
index 63045e6..92d8e16 100644
--- a/examples/dotnet/functionexecution/README.md
+++ b/examples/dotnet/functionexecution/README.md
@@ -4,22 +4,51 @@ This example illustrates how to execute server side java functions.
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Run the following Powershell script which starts the Geode Locator, deploys the jar file containing your function, starts the Geode Server, and creates the region.
-  ```
-  PS> startserver.ps1
-  ```
-* Execute `Apache.Geode.Examples.FunctionExecutionCs.exe`.
-  
-  output:
-  ```
-  Storing id and username in the region
-  Getting the user info from the region
-  rtimmons = Robert Timmons
-  scharles = Sylvia Charles
-  Function Execution Results:
-     Count = 1
-     value = Robert Timmons
-     value = Sylvia Charles
-  ```
+1. From a command shell, set the current directory to the `DataSerializableCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/DataSerializableCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `FunctionExecutionCs.exe`, expect the following output:
+
+       Storing id and username in the region
+       Getting the user info from the region
+       rtimmons = Robert Timmons
+       scharles = Sylvia Charles
+       Function Execution Results:
+          Count = 1
+          value = Robert Timmons
+          value = Sylvia Charles
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/pdxautoserializer/README.md b/examples/dotnet/pdxautoserializer/README.md
index 26640ba..2e311db 100644
--- a/examples/dotnet/pdxautoserializer/README.md
+++ b/examples/dotnet/pdxautoserializer/README.md
@@ -4,21 +4,48 @@ This is a simple example showing how to register for auto-serialization of custo
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Start Geode Server and create region.
-  ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=example_orderobject --type=PARTITION
-  ```
-* Execute `PdxAutoSerializer.exe`.
+1. From a command shell, set the current directory to the `PdxAutoSerializerCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/PdxAutoSerializerCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `PdxAutoSerializerCs.exe`, expect the following output:
   
-  output:
-  ```
-  Registering for reflection-based auto serialization
-  Storing order object in the region
-  order to put is Order: [65, Vox AC30, 11]
-  Successfully put order, getting now...
-  Order key: 65 = Order: [65, Vox AC30, 11]
-  ```
+       Registering for reflection-based auto serialization
+       Storing order object in the region
+       order to put is Order: [65, Vox AC30, 11]
+       Successfully put order, getting now...
+       Order key: 65 = Order: [65, Vox AC30, 11]
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/pdxserializable/README.md b/examples/dotnet/pdxserializable/README.md
index 0ee135e..19d773e 100644
--- a/examples/dotnet/pdxserializable/README.md
+++ b/examples/dotnet/pdxserializable/README.md
@@ -4,21 +4,48 @@ This is a simple example showing how to register for serialization of custom obj
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Start Geode Server and create region.
-  ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=example_orderobject --type=PARTITION
-  ```
-* Execute `PdxSerializableCs.exe`.
+1. From a command shell, set the current directory to the `PdxSerializableCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/PdxSerializableCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `PdxSerializableCs.exe`, expect the following output:
   
-  output:
-  ```
-  Registering for data serialization
-  Storing order object in the region
-  order to put is Order: [65, Donuts, 12]
-  Successfully put order, getting now...
-  Order key: 65 = Order: [65, Donuts, 12]
-  ```
+       Registering for data serialization
+       Storing order object in the region
+       order to put is Order: [65, Donuts, 12]
+       Successfully put order, getting now...
+       Order key: 65 = Order: [65, Donuts, 12]
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/put-get-remove/README.md b/examples/dotnet/put-get-remove/README.md
index 66f62cb..9fb3c7d 100644
--- a/examples/dotnet/put-get-remove/README.md
+++ b/examples/dotnet/put-get-remove/README.md
@@ -6,22 +6,48 @@ We then put, get, and remove some primitive data in the region.
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Start Geode Server and create region.
-  ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=example_userinfo --type=PARTITION
-  ```
-* Execute `Apache.Geode.Examples.PutGetRemove.exe`.
+1. From a command shell, set the current directory to the `PutGetRemove` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/PutGetRemove
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `PutGetRemove.exe`, expect the following output:
   
-  output:
-  ```
-  Storing id and username in the region
-  Getting the user info from the region
-  rtimmons = Robert Timmons
-  scharles = Sylvia Charles
-  Removing rtimmons info from the region
-  Info for rtimmons has been deleted
-  ```
+       Storing id and username in the region
+       Getting the user info from the region
+       rtimmons = Robert Timmons
+       scharles = Sylvia Charles
+       Removing rtimmons info from the region
+       Info for rtimmons has been deleted
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file
diff --git a/examples/dotnet/remotequery/README.md b/examples/dotnet/remotequery/README.md
index 9876dd1..c7d49ef 100644
--- a/examples/dotnet/remotequery/README.md
+++ b/examples/dotnet/remotequery/README.md
@@ -4,24 +4,51 @@ This is a simple example showing how to execute a query on a remote region.
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed
+* Set `GEODE_HOME` to the install directory of Apache Geode
 
 ## Running
-* Start Geode Server and create region.
-  ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=custom_orders --type=PARTITION
-  ```
-* Execute `RemoteQueryCs.exe`.
-  
-  output:
-  ```
-  Registering for data serialization
-  Create orders
-  Storing orders in the region
-  Getting the orders from the region
-  The following orders have a quantity greater than 30:
-  Order: [6, product z, 42]
-  Order: [4, product z, 102]
-  Order: [2, product y, 37]
-  ```
+1. From a command shell, set the current directory to the `RemoteQueryCs` directory in your example workspace.
+
+    ```console
+    $ cd workspace/examples/dotnet/RemoteQueryCs
+    ```
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File startserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ startserver.ps1
+    ```
+
+3. Execute `RemoteQueryCs.exe`, expect the following output:
+
+       Registering for data serialization
+       Create orders
+       Storing orders in the region
+       Getting the orders from the region
+       The following orders have a quantity greater than 30:
+       Order: [6, product z, 42]
+       Order: [4, product z, 102]
+       Order: [2, product y, 37]
+
+4. Run the `stopserver.ps1` script to gracefully shutdown the Geode cluster.
+
+   For Windows cmd:
+
+    ```console
+    $ powershell.exe -File stopserver.ps1
+    ```
+
+   For Windows Powershell:
+
+    ```console
+    $ stopserver.ps1
+    ```
\ No newline at end of file